【问题标题】:Need to access multiple methods in order to compare objects需要访问多个方法才能比较对象
【发布时间】:2019-06-10 23:08:28
【问题描述】:

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

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

我试过上面的代码没有成功。

【问题讨论】:

    标签: java list arraylist lambda comparator


    【解决方案1】:

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

    【讨论】:

    • 可以使用Comparator.comparingInt来避免额外的装箱
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-15
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 2023-04-08
      • 2021-06-12
      相关资源
      最近更新 更多