Java Comparator#通过class属性的属性比较排序
假设我有一个ClassA类,它的属性是ClassB:Java Comparator#通过class属性的属性比较排序,java,java-8,comparator,Java,Java 8,Comparator,假设我有一个ClassA类,它的属性是ClassB: public ClassA { private String attr; private ClassB classB; } public ClassB { private String attr1; private int attr2; } 从上面的类中,是否可以使用Comparator按ClassB的属性对ClassA的列表进行排序?它可以通过code比较器轻松地按ClassA属性进行排序。比较(Clas
public ClassA
{
private String attr;
private ClassB classB;
}
public ClassB
{
private String attr1;
private int attr2;
}
从上面的类中,是否可以使用Comparator
按ClassB的属性对ClassA的列表进行排序?它可以通过code比较器轻松地按ClassA属性进行排序。比较(ClassA::getAttr)
,但是如果我想按ClassB
中的属性对列表进行排序,比如说attr2
属性呢 你可以这样做
List<ClassA> sortedList = list.stream()
.sorted(Comparator.comparing(a -> a.getClassB().getAttr2()))
.collect(Collectors.toList());
你可以这样做
List<ClassA> sortedList = list.stream()
.sorted(Comparator.comparing(a -> a.getClassB().getAttr2()))
.collect(Collectors.toList());
只是普通的点符号
comparing(item -> item.getClassB().getAttr2());
。。。只要小心空值。如果ClassA对象的classB属性为null,它将抛出NullPointerException。仅使用普通点表示法
comparing(item -> item.getClassB().getAttr2());
。。。只要小心空值。如果ClassA对象的classB属性为null,它将抛出NullPointerException。只需使用
Comparator.comparing(item -> item.getClassB().getAttr2())
只用
Comparator.comparing(item -> item.getClassB().getAttr2())
记住也要处理
null
。我已经更新了答案,以便它处理null
值。@Jai因为OP没有说元素或值可以是null
,没有理由用可能过时的null
检查来混乱代码。记住也要处理null
。我已经更新了答案,以便它处理null
值。@Jai因为OP没有说元素或值可以是null
,没有理由用可能过时的null
检查来混乱代码。