Tengo Lista de Objetos. Cada objeto contiene una lista de Long y una lista de JsonNode. Lo que intento hacer es crear una tercera Lista con Objeto, en la que cada Objeto es el resultado de una unión cruzada entre las dos Listas anteriores.
P.ej
class MyClass{ List<Long> _listLong; List<JsonNode> _listJsonNode; }Tengo una lista de objetos de MyClass. Lo que quiero es crear una Lista de MyClass.
class MyClass2{ Long id; JsonNode jsonNode; } de modo que List<MyClass2> contenga el resultado de una combinación cruzada de List<Long> y List<JsonNode> .
Puedo hacer lo mismo usando bucles. ¿Hay alguna manera de lograr lo mismo usando Streams en Java?
Si está comenzando con una lista de objetos MyClass , debe aplanarlo y usar dos flujos anidados para el producto cartesiano.
List<MyClass2> result = myClassList.stream().flatMap( mc -> mc.get_listLong() .stream() .flatMap(i -> mc.get_listJsonNode() .stream() .map(js -> new MyClass2(i, js)))) .collect(Collectors.toList()); Eso supone que existe el constructor MyClass2(Long, JsonNode) . El flatMap interno está creando el producto cartesiano requerido, esencialmente iterando sobre todos los elementos JsonNode para cada elemento Long .