【问题标题】:What is the most elegant way to sort a list of objects in Java? [duplicate]在 Java 中对对象列表进行排序的最优雅的方法是什么? [复制]
【发布时间】:2015-08-18 12:37:35
【问题描述】:

我有以下 java 类:

public class Customer {
    private long id;

    public long getId() {
        return id;
    }
}

我还有一个List<Customer> customers。使用 lambda 表达式按Customer.getId() 对列表进行排序的最优雅的方法是什么?

现在我有这个代码:

Comparator<Customer> customerComparator = (previousCustomer, nextCustomer) ->
        Long.compare(previousCustomer.getId(), nextCustomer.getId());

customers.sort(customerComparator);

但是感觉很笨拙,特别是如果我需要为每个不同的排序或每个不同的通用列表编写一个比较器。这可以用一行代码完成吗?

【问题讨论】:

  • 内联customerComparator变量==>一行代码。
  • 在你的Customer 类中实现Comparable 并使用Collections.sort(customers) 如果你不必使用lambda 会不会更好

标签: java lambda java-8


【解决方案1】:

我想你可能正在寻找Comparator.comparing...() 方法:

customers.sort(comparingLong(Customer::getId))

【讨论】:

    【解决方案2】:

    在 Java 8 中,您可以写在一行上。

    customers.sort((a, b) -> Long.compare(a.getId(), b.getId());
    

    如果您制作Customer implements Comparable&lt;Customer&gt;,您可以这样做

    customers.sort(Customer::compare);
    

    customers.sort(null);
    

    【讨论】:

    • 如果类 Customercompare 方法,您可以使用 customers.sort(Customer::compare);。它不必为此实现任何特定的接口。
    【解决方案3】:

    使用 Lambda 表达式

    对列表进行排序
    customers.sort((c1, c2) -> Long.compare(c1.getId(),c2.getId()));
    

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 1970-01-01
      • 2022-10-06
      • 2013-07-07
      • 2020-12-30
      • 2019-08-17
      • 2016-03-21
      • 1970-01-01
      • 2012-04-12
      相关资源
      最近更新 更多