Так что, как уже говорилось ранее, вы просто неправильно сравниваете два подхода.

но я начал использовать collectAndThen и обнаружил, что это занимает немного больше времени по сравнению с другими процедурами кодирования, которые я использовал для выполнения подобных задач.

Вот мой код:

        System.out.println("CollectingAndThen");
        Long t = System.currentTimeMillis();
        String personWithMaxAge = persons.stream()
                                        .collect(Collectors.collectingAndThen(
                                                                Collectors.maxBy(Comparator.comparing(Person::getAge)),
                                                                (Optional<Person> p) -> p.isPresent() ? p.get().getName() : "none"
                                                ));


        System.out.println("personWithMaxAge - "+personWithMaxAge + " time taken = "+(System.currentTimeMillis() - t));
        Long t2 = System.currentTimeMillis();
        String personWithMaxAge2 = persons.stream().sorted(Comparator.comparing(Person::getAge).reversed())
                                                    .findFirst().get().name;
        System.out.println("personWithMaxAge2 : "+personWithMaxAge2+ " time taken = "+(System.currentTimeMillis() - t2));

И вот он вывод:

CollectingAndThen
personWithMaxAge - Peter time taken = 17
personWithMaxAge2 : Peter time taken = 1

который показывает, что сбор и затем занимает больше времени сравнительно.

Поэтому мой вопрос - стоит ли продолжать собирать и потом, или есть какие-то другие предложения?

Ответы на вопрос(3)

Ваш ответ на вопрос