Question: Question:
[[a, a, a], [b, b, b], [c, c, c]]
of
[a, a, a, b, b, b, c, c, c]
I want to do this, but is there a way to do it with stream in one shot?
//普通にループするとこんな感じです。
List innerA = Arrays.asList("a","a","a");
List innerB = Arrays.asList("b","b","b");
List innerC = Arrays.asList("c","c","c");
List<List> outer = Arrays.asList(innerA,innerB,innerC);
System.out.println(outer);
//[[a, a, a], [b, b, b], [c, c, c]]
List innerABC = new ArrayList<>();
for(List inner : outer){
innerABC.addAll(inner);
}
System.out.println(innerABC);
//[a,a,a,b,b,b,c,c,c]
Answer: Answer:
You may be able to use Stream # flatMap (…) .
import java.util.*;
import java.util.stream.*;
import java.util.function.*;
public class StreamTest {
public static void main(String... args) {
List<String> innerA = Arrays.asList("a", "a", "a");
List<String> innerB = Arrays.asList("b", "b", "b");
List<String> innerC = Arrays.asList("c", "c", "c");
List<List<String>> outer = Arrays.asList(innerA, innerB, innerC);
//List innerABC = new ArrayList<>();
//for(List inner : outer){
// innerABC.addAll(inner);
//}
List<String> innerABC = outer.stream()
.flatMap(lst -> lst.stream())
.collect(Collectors.toList());
System.out.println(innerABC);
}
}