Achatamento uma lista de listas dentro de um mapa

Wilhelm Sorban:

Eu tenho um fluxo de ordens (a fonte sendo uma lista de pedidos). Cada pedido tem um cliente, e uma lista de OrderLine.

O que eu estou tentando alcançar é ter um mapa com o cliente como a chave, e todas as linhas de pedidos pertencentes a esse cliente, em uma lista simples, como valor.

O que eu consegui agora me uma volta Map<Customer>, List<Set<OrderLine>>>, fazendo o seguinte:

orders
  .collect(
    Collectors.groupingBy(
      Order::getCustomer,
      Collectors.mapping(Order::getOrderLines, Collectors.toList())
    )
  );

Ou eu estou olhando para obter um Map<Customer, List<OrderLine>>diretamente do fluxo de ordens, ou por alguma forma achatando a lista de um córrego do Map<Customer>, List<Set<OrderLine>>>que eu tenho acima.

Abhijith Nagarajan:

Você pode simplesmente usar Collectors.toMap.

Algo como

    orders
        .stream()
        .collect(Collectors
                .toMap(Order::getCustomer
                        , Order::getOrderLines
                        , (v1, v2) -> { List<OrderLine> temp = new ArrayList<>(v1); 
                                        temp.addAll(v2); 
                                        return temp;});

O terceiro argumento para a toMapfunção é a função merge. Se você não prever expressamente que e há uma chave duplicada, em seguida, ele irá lançar o erro ao terminar a operação.

Acho que você gosta

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