2017-05-29 2 views
6

ich diesen Code versucht habe (list ist ArrayList<List<Integer>>):Wie konvertiert man eine 2D-Liste in eine 1D-Liste mit Streams?

list.stream().flatMap(Stream::of).collect(Collectors.toList()); 

aber es tut nichts; Die Liste ist immer noch eine 2D-Liste. Wie kann ich diese 2D-Liste in eine 1D-Liste konvertieren?

+1

Verwenden 'flatMap (Strom -> stream) statt. –

+0

Das hat funktioniert. '.flatMap (l -> l.stream())'. Warum funktioniert das, aber 'Stream :: of' nicht? –

+1

'Stream.of' _adds_ eine Dimension. –

Antwort

6

Grund dafür ist, dass Sie immer noch eine Liste von Listen erhalten, ist, weil, wenn Sie Stream::of anwenden es einen neuen Stream Rückkehr von die vorhandenen.

Das heißt, wenn Sie Stream::of durchführen, wie es ist mit {{{1,2}}, {{3,4}}, {{5,6}}} dann, wenn Sie flatMap ausführen es ist dies gerne tun:

{{{1,2}}, {{3,4}}, {{5,6}}} -> flatMap -> {{1,2}, {3,4}, {5,6}} 
// result after flatMap removes the stream of streams of streams to stream of streams 

eher können Sie .flatMap(Collection::stream) verwenden, um einen Strom von Streams zu nehmen wie:

{{1,2}, {3,4}, {5,6}} 

und schalten sie ihn in:

{1,2,3,4,5,6} 

Daher können Sie Ihre aktuelle Lösung ändern:

List<Integer> result = list.stream().flatMap(Collection::stream) 
          .collect(Collectors.toList()); 
1

Sie können x.stream() in Ihrem flatMap verwenden. So etwas wie,

ArrayList<List<Integer>> list = new ArrayList<>(); 
list.add(Arrays.asList((Integer) 1, 2, 3)); 
list.add(Arrays.asList((Integer) 4, 5, 6)); 
List<Integer> merged = list.stream().flatMap(x -> x.stream()) 
     .collect(Collectors.toList()); 
System.out.println(merged); 

welche Ausgänge (wie ich glaube, Sie wollten)

[1, 2, 3, 4, 5, 6] 
2

Einfache Lösung:

List<List<Integer>> listOfLists = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4)); 
List<Integer> faltList = listOfLists. 
     stream().flatMap(s -> s.stream()).collect(Collectors.toList()); 
System.out.println(faltList); 

Antwort: [1, 2, 3, 4]

Hoffnung, dies hilft Ihnen

Verwandte Themen