La transformación de una lista anidada utilizando Java arroyos

David:

¿Es posible obtener el mismo resultado (como estoy recibiendo actualmente con la siguiente bucles for anidados) utilizando Streams?

List<String> people = Arrays.asList("John", "Adam");
List<String> dogs = Arrays.asList("alex", "rex");

List<List<String>> list = new ArrayList<List<String>>();
list.add(people);
list.add(dogs);

List<List<String>> list2 = new ArrayList<List<String>>();
for (int i = 0; i < list.size(); i++) {
    list2.add(new ArrayList<>());
    for (int j = 0; j < list.get(i).size(); j++) {
        list2.get(i).add(list.get(i).get(j).toUpperCase());
    }
}
System.out.println(list2);

Me gustaría obtener algo como esto en respuesta:

[[JOHN, ADAM], [ALEX, REX]]

Utilizando el siguiente Stream:

list.stream().flatMap(l -> l.stream()).map(String::toUpperCase).collect(Collectors.toList());

Yo sólo soy capaz de conseguir algo como esto:

[JOHN, ADAM, ALEX, REX]
Eran :

flatMapno le ayudará, ya que no desea una salida plana. Usted debe transformar cada interno Listpor separado en una caja superior List, y luego recoger todos estos Lists en la salida imbricada final List.

List<List<String>> list2 = list.stream()
        .map(l -> l.stream().map(String::toUpperCase).collect(Collectors.toList()))
        .collect(Collectors.toList());

Salida:

[[JOHN, ADAM], [ALEX, REX]]

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=200255&siteId=1
Recomendado
Clasificación