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

Need to access multiple methods in order to compare objects

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

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

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

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

所以你可以这样创建一个比较器:

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

之后,将比较器传递给排序方法。

您可以简单地使用 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());