Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 对对象的对象进行排序_Java_Sorting_Java Stream_Comparator - Fatal编程技术网

Java 对对象的对象进行排序

Java 对对象的对象进行排序,java,sorting,java-stream,comparator,Java,Sorting,Java Stream,Comparator,我想使用带有比较器参数的流api排序,但排序不正确。我总是有例外 我想用对另一个对象的引用对一个对象进行排序,而被引用的对象有一个字符串,所以我想按其长度对其进行排序 这是我的主要方法 List<Person> liste = Arrays.asList(new Person(new Info("akin")) ,new Person(new Info("lars"))

我想使用带有比较器参数的流api排序,但排序不正确。我总是有例外

我想用对另一个对象的引用对一个对象进行排序,而被引用的对象有一个字符串,所以我想按其长度对其进行排序

这是我的主要方法

List<Person> liste = Arrays.asList(new Person(new Info("akin"))
                                  ,new Person(new Info("lars"))
                                  ,new Person(new Info("aaa")));

liste.stream()
     .map(p -> p.f)
     .map(f -> f.name)
     .sorted((s,s2) -> s.length() - s2.length())
     .forEach(System.out::print);
List liste=Arrays.asList(新人(新信息(“类似”))
,新人(新信息(“LAR”))
,新人(新信息(“aaa”));
liste.stream()
.地图(p->p.f)
.map(f->f.name)
.sorted((s,s2)->s.length()-s2.length())
.forEach(系统输出::打印);

我在这里做一个假设,因为您的流代码看起来不错

我假设在这两个构造函数中至少有一个(对于
Person
Info
)没有将传入值正确分配给实例字段,因此它是null,并且尝试获取
f.name
[f.name].length()
将导致NullPointerException

下面是您发布的流的一个工作示例(您会注意到,除了一些缩进之外,我没有更改您问题中的代码中的任何内容)

导入java.util.array;
导入java.util.List;
班长{
公共静态void main(字符串[]args){
List liste=Arrays.asList(新人(新信息(“类似”)),
新人(新信息(“LAR”),
新人(新信息(“aaa”));
liste.stream()
.地图(p->p.f)
.map(f->f.name)
.sorted((s,s2)->s.length()-s2.length())
.forEach(系统输出::打印);
}
静态类人{
信息f;
公众人士(信息f){
这个。f=f;
}
}
静态类信息{
字符串名;
公共信息(字符串名称){
this.name=名称;
}
}
}
您的构造函数可能看起来像

公众人物(信息f){
f=f;
}
(与我的示例相比,请注意缺少的
this
)。很好地阅读了
的用法

我的IDE还建议对
sorted
方法进行一个小的更改。您可以使用如下所示的:

.sorted(Comparator.comparingInt(String::length))
这实际上归结于你认为更具可读性的内容


有关NullPointerExceptions的进一步参考,请阅读评论中已发布的。这不会是你的最后一次;)

您会遇到什么样的异常?在MainStart.lambda$main$0(MainStart.java:43)的线程“main”java.lang.NullPointerException中出现异常……它可能是重复的,因为它是可选方法吗?@bratan没有您正在执行的实际代码的完整细节,很难说为什么它会导致
NullPointerException
。尽管您仍然需要检查
person
的值,但每个对象的
info
name
不应为
null
,这就是异常可能产生的原因。