需要访问多种方法才能比较对象

时间:2019-01-16 19:45:50

标签: java list arraylist lambda comparator

阅读Oracle文档后,我没有找到想要的东西。我有一个对象,可以用不同的方式比较它,但是它的属性之一是列表。如何根据该List属性的大小进行比较?

Comparator comparator = Comparator.comparing(Product::getCommentList::size);
List<Product> soldL = new LinkedList();
soldL.addAll(sold);
Collections.sort(soldL,comparator);

我尝试了上面的代码,但没有成功。

2 个答案:

答案 0 :(得分:2)

您可以简单地使用lambda并将现有代码改进为:

Comparator<Product> comparator = Comparator.comparing(p -> p.getCommentList().size()); // type 'Product' bound
List<Product> soldL = new LinkedList<>(); // type inferred '<>'
soldL.addAll(sold);
soldL.sort(comparator); // use 'List.sort'

编辑 :您可以使用comparingInt而不是进行比较以避免装箱,例如:

Comparator<Product> comparator = Comparator.comparingInt(p -> p.getCommentList().size()); 

答案 1 :(得分:1)

您可以通过在Product上实现一个返回列表大小(例如:public int getCommentListSize() { return commentList.size(); })的方法来简化比较。

因此您可以通过以下方式创建比较器:

Comparator comparator = Comparator.comparing(Product::getCommentListSize);

然后,将比较器传递给sort方法。