Java 对对象流进行排序,首先获取并打印出来
我正在编写代码,按年龄对人员列表进行排序,并将前缀添加到最早的人员列表并打印出来 已定义的对象列表:Java 对对象流进行排序,首先获取并打印出来,java,sorting,lambda,java-stream,Java,Sorting,Lambda,Java Stream,我正在编写代码,按年龄对人员列表进行排序,并将前缀添加到最早的人员列表并打印出来 已定义的对象列表: Person person1 = new Person(40,"John", "Smith"); Person person2 = new Person(45,"Mike", "Well"); Person person3 = new Person(68,"Bob", "Parks"); Person person4 = new Person(49,"Leon",
Person person1 = new Person(40,"John", "Smith");
Person person2 = new Person(45,"Mike", "Well");
Person person3 = new Person(68,"Bob", "Parks");
Person person4 = new Person(49,"Leon", "Foo");
Person person5 = new Person(30,"Christian", "Markus");
List<Person> personList = new ArrayList<>();
personList.add(person1);
personList.add(person2);
personList.add(person3);
personList.add(person4);
personList.add(person5);
Person-person1=新人(40,“约翰”、“史密斯”);
Person person2=新人(45,“迈克”,“好”);
Person person3=新人(68人,“鲍勃”,“帕克斯”);
Person person4=新人(49,“Leon”,“Foo”);
Person person5=新人(30,“基督徒”、“马库斯”);
List personList=新建ArrayList();
personList.add(person1);
personList.add(person2);
personList.add(person3);
personList.add(person4);
personList.add(person5);
我可以排序和添加前缀,但问题是得到第一个项目,并打印出来
List<Person> orderedPersonAge = personList
.stream()
.sorted(Comparator.comparing(Person::getAge).reversed())
.map(s-> new
Person(s.getAge(),"Super"+s.getName(),s.getSureName()))
.collect(Collectors.toList());
System.out.println(orderedPersonAge);
List orderedPersonAge=personList
.stream()
.sorted(Comparator.comparing(Person::getAge).reversed())
.地图->新建
Person(s.getAge(),“Super”+s.getName(),s.getSureName())
.collect(Collectors.toList());
System.out.println(orderedPersonAge);
我试着玩findFirst()
不同的方法是按年龄排序,取最老的一个,然后添加前缀…您可能只是在寻找
personList.stream()
.max(Comparator.comparing(Person::getAge)) // solves for sort with reverse and find first
.map(s -> new Person(s.getAge(), "Super" + s.getName(), s.getSurname())) // map if present
.ifPresent(System.out::println); // print the mapped output if present
你可以这样做
Person orderedPersonAge = personList
.stream()
.sorted(Comparator.comparing(Person::getAge).reversed())
.map(s-> new Person(s.getAge(),"Super"+s.getName(),s.getSureName()))
.collect(Collectors.toList())
.get(0);
System.out.println(orderedPersonAge);
或
我尝试使用findFirst()
-您的问题是什么?在可选的ifPresent上失败,我认为它也需要包括在内,它可以工作并遵循我的原始路径,我的问题是,我定义了列表orderedPersonAge=personList
而不是Person orderedPersonAge=personList
很抱歉进行后期格式化。与直接的.max(Comparator.comparating(Person::getAge))
相比,它们中的每一个都在浪费资源,但使用的是.collect>(Collectors.toList()).get(0)
因为在第一个变量中,它将最大化…@Holger确实如此。这个解决方案对我来说绝对有意义,但返回错误:(40,27)java:不兼容类型:void无法转换为java.util.List
原因可能是List orderedPersonAge=personList
@talex-proposedPerson-orderedPersonAge=personList
@Paul这只是一个void
调用,因为您要执行的操作是消耗最大年龄的人。谢谢您的补充评论
Person orderedPersonAge = personList
.stream()
.sorted(Comparator.comparing(Person::getAge).reversed())
.map(s-> new Person(s.getAge(),"Super"+s.getName(),s.getSureName()))
.findFirst()
.get();
System.out.println(orderedPersonAge);