2017-05-29 24 views
6

Tôi đã thử mã này (listArrayList<List<Integer>>):Làm thế nào để chuyển đổi danh sách 2D sang danh sách 1D với luồng?

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

nhưng nó không làm bất cứ điều gì; danh sách vẫn là danh sách 2D. Làm thế nào tôi có thể chuyển đổi danh sách 2D này thành danh sách 1D?

+1

Sử dụng 'flatMap (dòng -> stream) 'thay thế. –

+0

Đã hiệu quả. '.flatMap (l -> l.stream())'. Tại sao nó hoạt động, nhưng 'Stream :: of' thì không? –

+1

'Stream.of' _adds_ một thứ nguyên. –

Trả lời

6

Lý do được rằng bạn vẫn đang nhận được một danh sách liệt kê là bởi vì khi bạn áp dụng Stream::of nó trả về một dòng mới của những cái hiện có.

Đó là khi bạn thực hiện Stream::of nó giống như có {{{1,2}}, {{3,4}}, {{5,6}}} sau đó khi bạn thực hiện flatMap nó giống như làm điều này:

{{{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 

thay vì bạn có thể sử dụng .flatMap(Collection::stream) để có một dòng suối như:

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

và biến nó thành:

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

Vì vậy, bạn có thể thay đổi giải pháp hiện tại của bạn để:

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

Bạn có thể sử dụng x.stream() trong số flatMap của mình. Một cái gì đó như thế nào,

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); 

Những kết quả đầu ra (như tôi nghĩ rằng bạn muốn)

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

Giải pháp đơn giản là:

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); 

Trả lời: [1, 2, 3, 4]

Hy vọng điều này sẽ giúp bạn

Các vấn đề liên quan