我有一些bean类型(产品)的列表,我需要找到我的列表中的哪些产品重复,让我们说我的bean产品包含这些的getter和setter
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因此,对象总是不同的,假设我的列表填写如下:
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填充它然后将对象添加到我的列表中,但这更简单)
到目前为止我尝试过:
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?我应该使用地图吗?任何线索都将受到赞赏。
答案 0 :(得分:0)
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
答案 1 :(得分:0)
您可以使用可比较界面或比较器对列表进行排序。
Java中的比较器比较提供的两个对象,而Comparable interface将“this”引用与指定的对象进行比较。
Java中的可比较用于实现对象的自然排序。在 Java API String,Date和wrapper类实现Comparable 接口
它将根据计数返回已排序的列表。可以使用简单的编程进行排序并从中检索计数。
请参阅Comparable interface Comparator。请查看Here示例。