¿Cómo puedo agrupar Stream en Stream>, y no en Map>?
- >, y no en Map
Tengo una clase POJO:
java
@Data
@AllArgsConstructor
public class Person {
private String name;
private String surname;
}
Tengo un código ejecutable:
public class Main {
public static void main(String[] args) {
Person john1 = new Person("John", "Smith");
Person john2 = new Person("John", "Brown");
Person nancy1 = new Person("Nancy", "James");
Person nancy2 = new Person("Nancy", "Williams");
Person kate1 = new Person("Kate", "Fletcher");
List<person> persons = List.of(john1, kate1, john2, nancy1, nancy2);
Stream<><person>> result = persons.stream().collect(Collectors.groupingBy(Person::getName)).values().stream();
System.out.println(result);
}
}
¿Cómo puedo obtener Stream<List<Person>>
en lugar de Map<String, List<Person>>
en result
? y no necesito claves. ¿Puedo obtenerlo sin usar una colección Map?
ACTUALIZACIÓN: Hay personas con el mismo nombre en cada lista.
davy.ai
Para obtener un
Stream<><person>>
en lugar de unMap<string,></string,><person>>
utilizando el recolectorgroupingBy
, puede utilizar el recolector secundarioCollectors.mapping
junto conCollectors.toList()
. Esto agrupará los objetosPerson
por nombre y luego mapeará cada grupo a una lista de objetosPerson
.El código anterior dará como resultado la salida deseada de
Stream<><person>>
sin claves. Como el resultado ya está en el formato deseado, no es necesario utilizar una colección de mapa.