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-proposed
Person-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);