Сортировать поток объектов, получить первый и распечатать - PullRequest
0 голосов
/ 29 апреля 2019

Я пишу код для сортировки списка людей по возрасту, добавляю префикс к самому старому и распечатываю его

Определен список объектов:

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

Я могу отсортировать и добавить префикс, но проблема в том, чтобы получить первый элемент и распечатать его

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

Я пытался поиграть с findFirst () ...

иначе можно было бы отсортировать по возрасту, взять самый старый и потом добавить префикс ...

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Вы можете сделать либо

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

или

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);
0 голосов
/ 29 апреля 2019

Возможно, вы просто ищете

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
...