在Java中对对象列表进行排序的最优雅方法是什么?

时间:2015-08-18 12:37:36

标签: java lambda java-8

我有以下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);

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

3 个答案:

答案 0 :(得分:12)

我认为您可能正在寻找Comparator.comparing...()方法:

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

答案 1 :(得分:10)

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

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

如果你做Customer implements Comparable<Customer>,你可以做

customers.sort(Customer::compare);

customers.sort(null);

答案 2 :(得分:4)

使用 Lambda Expression

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