我需要通过一个对象属性的一个属性来比较一个对象数组 我在做:
List<Sell> collect = sells.stream()
.sorted(Comparator.comparing(Sell::getClient.name, String::compareToIgnoreCase))
.collect(Collectors.toList());
它没有编译,没有人知道怎么办?
感谢。
答案 0 :(得分:4)
这是导致错误的代码部分
Sell::getClient.name
您可以创建对特定类型的任意对象的(静态或非静态)方法的引用。对getClient
类型的任何对象的Sell
方法的引用如下所示:
Sell::getClient
但方法引用不是对象,也没有成员可以访问。使用此代码,您尝试访问引用的成员变量(并且可以&#39;)
Sell::getClient.name
此外,方法引用不是类,因此您无法从它们获取另一个方法引用。如果你尝试过,你就无法做到这一点:
Sell::getClient::getName
@mlk提供了特定案例的正确语法:
x -> x.getClient().name
Sell::getClientName
(不一定是静态方法)答案 1 :(得分:0)
我无法看到您的代码,或者您收到的错误。所以这是猜测。
我相信你想要
Test
你想在返回时调用一个方法,所以你需要创建一个匿名函数。
您的另一个选择是:
class Test {
// I assume that Client looks like this.
static class Client {
public String name;
}
// And that Sell looks like this.
// I'm sure your Client and Sell are bigger, but this is all
// that matters for now.
static class Sell {
public Client getClient() { return null; }
}
public static void main (String[] args) throws java.lang.Exception
{
List<Sell> sells = new ArrayList<>();
sells.stream().sorted(Comparator.comparing(x -> x.getClient().name, String::compareToIgnoreCase))
}
}
答案 2 :(得分:0)
为了访问嵌套属性并以相反的顺序排序,我这样做是:
Comparator<Sell> comparator = Comparator.comparing(h -> h.getAudit().getCreatedTs());
sells.sort(comparator.reversed());