首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对List<SomeBeanType>使用Collections.frequency

对List<SomeBeanType>使用Collections.frequency
EN

Stack Overflow用户
提问于 2013-08-15 22:59:06
回答 2查看 1.5K关注 0票数 1

我有一些bean类型(产品)的列表,我需要查找列表中哪些产品是重复的,假设我的bean产品包含像这样的getter和setter

代码语言:javascript
运行
复制
public class Product {
 private int id;
 private String name;
 private BigDecimal cost;
 private int uniqueAssignedId;

 public Product(int id, String name, BigDecimal cost, int uniqueAssignedId) {
  this.id = id.....
 }

 public int getId() {
  return this.id;
 }

//The rest of getters and setters.

我试着把这个列表放到一个映射中去寻找重复的"id“值,但它并没有像我预期的那样工作,问题是我的列表是一个售出产品的列表(对不起,冗余),所以每个售出的产品都有一个唯一的uniqueAssignedId,因此对象总是不同的,假设我的列表填充如下:

代码语言:javascript
运行
复制
listProducts.add(5, "Soda", 1.00, 1);
listProducts.add(3,"Phone", 300.00, 2);
listProducts.add(4, "Cofee", 5.00, 3);
listProducts.add(5, "Soda", 1.00, 4);
listProducts.add(4, "Cofee", 5.00, 5);
listProducts.add(5, "Soda", 1.00, 6);

(我知道我必须创建一个对象Product product = new Product()并用setter填充它,然后将该对象添加到我的列表中,但这比较简单)

到目前为止,我尝试了以下几点:

代码语言:javascript
运行
复制
Set<Product> uniqueId = new HashSet<Product>(listProducts);
        for (Product product : uniqueId) {
            System.out.println("The product with id "+product.getId+" was repeated: "
                    + Collections.frequency(listProducts, product.getId));
        }

但它总是迭代6次,而不是3次(3是我卖出的不同产品的数量)。那么如何才能使Hashset只获得不同的id呢?我应该使用地图吗?任何线索都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2013-08-16 00:25:54

代码语言:javascript
运行
复制
  public class ProductComparator implements Comparator<Product>
  {
     public int compare(Product p1, Product p2)
     {
          return p1.id-p2.id;
     }
  }


  ArrayList<Product> listProducts = new ArrayList<Product>();
  listProducts.add(new Product(5, "Soda", 1.00, 1));
  listProducts.add(new Product(3,"Phone", 300.00, 2));
  listProducts.add(new Product(4, "Cofee", 5.00, 3));
  listProducts.add(new Product(5, "Soda", 1.00, 4));
  listProducts.add(new Product(4, "Cofee", 5.00, 5));
  listProducts.add(new Product(5, "Soda", 1.00, 6));
  System.out.println(listProducts.size()); // Total records 

  TreeSet<Product> products = new TreeSet<Product>(new ProductComparator());
  products.addAll(listProducts);                
  ArrayList<Product> duplicate = new ArrayList<Product>();
  duplicate.addAll(products);
  listProducts.removeAll(duplicate);
  System.out.println(products.size()); // Now no duplicates in this set. 
  System.out.println(listProducts.size()); // Now only duplicate in this list
票数 0
EN

Stack Overflow用户

发布于 2013-08-16 12:47:01

您可以使用可比较接口或比较器对列表进行排序。

Java中的

比较器比较所提供的两个对象,而比较接口将"this“引用与指定的对象进行比较。

Java中的可比对象用于实现对象的自然排序。在Java API String中,Date和wrapper类实现了类似接口。

它将根据计数返回一个排序列表。可以使用简单的编程进行排序并从中检索计数。

Refer 。查看 以获取示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18255476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档