¿El método collectAndThen es lo suficientemente eficiente?

Recientemente comencé a usar collectAndThen y descubrí que está tomando un poco más de tiempo comparativamente con los otros procedimientos de codificación, que utilicé para realizar tareas similares.

Aquí está mi código:

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

Y aquí está la salida:

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

lo que muestra que recogerAndThen lleva más tiempo comparativamente.

Entonces mi pregunta es: ¿debería seguir recolectando AndThen o hay otras sugerencias?

Respuestas a la pregunta(3)

Su respuesta a la pregunta