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

Mil*_*hev 3 java lambda java-8

我有以下java类:

public class Customer {
    private long id;

    public long getId() {
        return id;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

现在我有这个代码:

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

customers.sort(customerComparator);
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*nik 12

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

customers.sort(comparingLong(Customer::getId))
Run Code Online (Sandbox Code Playgroud)


Pet*_*rey 10

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

customers.sort((a, b) -> Long.compare(a.getId(), b.getId());
Run Code Online (Sandbox Code Playgroud)

如果你做的Customer implements Comparable<Customer>就可以做到

customers.sort(Customer::compare);
Run Code Online (Sandbox Code Playgroud)

要么

customers.sort(null);
Run Code Online (Sandbox Code Playgroud)

  • 你可以使用`customers.sort(Customer :: compare);`如果类`Customer`有一个`compare`方法.它不必为此实现任何特定的接口. (2认同)