es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo recopilar una lista dentro de una lista.

Tengo la clase Stores que contiene una matriz de Items.

public class Store extends NamedEntity{
    String webAddress;
    Item[] items;

    public Store(String name, String webAddress, Set<item> items) {
        super(name);
        this.webAddress = webAddress;
        this.items = items.toArray(new Item[0]);
    }
}

Cada artículo (clase Item) tiene diferentes volúmenes y estoy agregando artículos a la tienda. Digamos que tengo 20 artículos y agrego 10 a 2 o 3 tiendas diferentes y tengo que ordenar estos artículos en las tiendas en función de su volumen.

Los ordenaría de esta manera:

List<item> storedItemsSorted = storedItems.stream()
                .sorted(Comparator.comparing(Item::getVolume))
                .collect(Collectors.toList());

No sé cómo agregar los artículos a esta lista storedItemsSorted.

Intenté algo como esto pero no funciona:

List<item> storedItems = storeList
                .stream()
                .map(s->s.getItems())
                .collect(Collectors.toList());

Dice:

“`
Required type: List<item>

Provided:List<item[]>
“`</item[]>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema, necesitas usar flatMap() en lugar de map() debido a que la operación map() devuelve un Stream de arrays, mientras que tú deseas un Stream de Items. Aquí está el código corregido:

    List<item> storedItems = storeList
            .stream()
            .flatMap(s -> Arrays.stream(s.getItems()))
            .sorted(Comparator.comparing(Item::getVolume))
            .collect(Collectors.toList());
    

    Este código hace flatMap de los arrays devueltos por getItems() en un Stream de Items, los ordena por volumen y los recolecta en una Lista.

Comments are closed.