El aplanamiento de una colección dentro de la colección para obtener una lista única <>

Serberuss:

Estoy bastante familiarizado con el uso de Java y estaba tratando de aplanar colecciones dentro de las colecciones en el mapa para tratar de obtener una lista única. Sin embargo, no parece ser capaz de conseguir este trabajo. Con el fin de reproducir este He creado todo un ejemplo sencillo de lo que estoy tratando de hacer. Aquí es lo que tengo hasta el momento:

Clase A

import java.util.List;

public class ClassA {
    private List<ClassB> listOfClassB;

    public ClassA(List<ClassB> listOfClassB) {
        this.listOfClassB = listOfClassB;
    }

    public List<ClassB> getListOfClassB() {
        return this.listOfClassB;
    }
}

Clase B

    public class ClassB {
    private String item;

    public ClassB(String item) {
        this.item = item;
    }

    public String getItem() {
        return item;
    }
}

Principal

public class Main {
    public static void main(String[] args) {
        ClassB firstClass = new ClassB("A");
        ClassB secondClass = new ClassB("B");
        ClassB thirdClass = new ClassB("C");
        ClassB fourthClass = new ClassB("D");
        ArrayList<ClassB> firstClassList = new ArrayList<>();
        ArrayList<ClassB> secondClassList = new ArrayList<>();

        firstClassList.add(firstClass);
        firstClassList.add(secondClass);
        secondClassList.add(thirdClass);
        secondClassList.add(fourthClass);

        ArrayList<ClassA> classes = new ArrayList<>();
        classes.add(new ClassA(firstClassList));
        classes.add(new ClassA(secondClassList));

        List<List<String>> collect = classes.stream().map(c -> c.getListOfClassB().stream().map(ClassB::getItem).collect(Collectors.toList())).collect(Collectors.toList());
    }
}

Como se puede ver en la parte inferior que soy capaz de conseguir List<List<String>>, pero lo que estoy buscando para obtener es un List<String>de los elementos dentro de ClassB. He intentado usar un flatmap para esto, pero no pude hacerlo funcionar y fue en busca de alguna orientación.

Gracias por adelantado.

KayV:

Aquí está el ejemplo flatmap que funciona muy bien:

classes.stream().flatMap(aclass -> aclass.getListOfClassB().stream())
    .forEach(b -> System.out.println("Class B Item Name : "+b.getItem()));

Se da el siguiente resultado:

Class B Item Name : A
Class B Item Name : B
Class B Item Name : C
Class B Item Name : D

y para obtener la respuesta exacta:

List<String> collect2 = classes.stream().flatMap(aclass -> aclass.getListOfClassB().stream())
    .map(b -> b.getItem())
    .collect(Collectors.toList());

me da una lista de la siguiente manera:

collect2 : [A, B, C, D]

Supongo que te gusta

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