Achatamento uma lista de lista para uma lista com Java 8 fluxo de API

Twi:

Eu tenho o seguinte código que poderia ser muito mais simples usando Java 8 fluxo de API:

List<List<String>> listOfListValues;
public List<String> getAsFlattenedList() {
        List<String> listOfValues= new ArrayList<>();
        for (List<String> value: listOfListValues) {
            listOfValues.add(String.valueOf(value));
        }
        return listOfValues;
    }

I procurou uma solução no SO e encontrei este:

listOfListValues.stream()
        .flatMap(List::stream)
        .collect(Collectors.toList());

Mas isso não fazer o mesmo que eu quero.

Roland:

Você precisa de apenas um "simples" mapaqui:

List<List<String>> listOfListValues;
public List<String> getAsFlattenedList() {
    return listOfListValues.stream()
            .map(String::valueOf)
            .collect(toList());
}

flatMapé bastante usado para transformar um Streampara o outro, o que faz sentido se você precisar de mais entradas ou menos, em seguida, atualmente disponível (ou apenas um recém-mapeada Streampara filtrar / map / etc-lo ainda mais para baixo), por exemplo:

  • contar todas as cordas únicas de todas as listas:

    listOfListValues.stream()
                    .flatMap(List::stream) // we want to count all, also those from the "inner" list...
                    .distinct()
                    .count()
    
  • entradas truncamento depois de um certo tamanho:

    listOfListValues.stream()
            .flatMap(list -> {
                if (list.size() > 3) // in this case we use only some of the entries
                    return Stream.concat(list.subList(0, 2).stream(), Stream.of("..."));
                else
                    return list.stream();
            })
            .collect(Collectors.toList());
    
  • achatamento valores de um mapa para várias chaves interessados:

    Map<Key, List<Value>> map = new HashMap<>();
    Stream<Value> valueStream = interestedKeys.stream()
                                              .map(map::get)
                                              .flatMap(List::stream);
    

Acho que você gosta

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