Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Comparator#通过class属性的属性比较排序_Java_Java 8_Comparator - Fatal编程技术网

Java Comparator#通过class属性的属性比较排序

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

假设我有一个ClassA类,它的属性是ClassB:

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
检查来混乱代码。