Java8 stream flatMap example 2018-06-06 23:23

map method is used to handle the element of stream and output the stream. flatMap method is used to handle multiple stream and output new stream. Here is some easy examples.

1. show all characters in List

Every word in list will generate its own stream by invoking split("") method. In order to show the distinct characters we need to handle multiple stream and make them into a new stream.

List<String> words = new ArrayList<>();
words.add("Hello");
words.add("World");
List<String> characters = words.stream().map(string -> string.split("")).flatMap(Arrays::stream).distinct().collect(Collectors.toList());
System.out.println("characters:" + characters);

The output is like following.

characters:[H, e, l, o, W, r, d]

2. show all pairs of two arrays

In order to show all possible pairs we need handle every item of numbers2 in the stream of number1. There are multiple stream when invoke number2.stream() method. So we need flatMap to handle multiple stream and put the result in a new stream.

List<Integer> numbers1 = Arrays.asList(1, 2, 3);
List<Integer> numbers2 = Arrays.asList(6, 8);
List<int[]> pairs = numbers1.stream().flatMap(i -> numbers2.stream().map(j -> new int[]{i, j})).collect(Collectors.toList());
for(int[] pair:pairs){
    System.out.println("pair:" + Arrays.toString(pair));
}

output

pair:[1, 6]
pair:[1, 8]
pair:[2, 6]
pair:[2, 8]
pair:[3, 6]
pair:[3, 8]

EOF