- In Java 8, we can use the
flatMapto convert the above 2 levels Stream into one Stream level or a 2d array into a 1d array.
# Stream<String[]> # Stream<Stream<String>> # String[][] [ [1, 2], [3, 4], [5, 6] ]
Convert to
# Stream<String> # String[] [1, 2, 3, 4, 5, 6]
Example :
package com.demo.java8;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Demo4 {
public static void main(String[] args) {
List<Emp4> mumbaiList = Arrays.asList(new Emp4[] {
new Emp4("1","Mumbai","20"),new Emp4("5","Mumbai","11"),new Emp4("8","Mumbai","15")
});
List<Emp4> delhiList = Arrays.asList(new Emp4[] {
new Emp4("2","Delhi","23"), new Emp4("9","Delhi","22") });
List<Emp4> kokataList = Arrays.asList(new Emp4[] {
new Emp4("3","Kolkata","25"),new Emp4("6","Kolkata","30"),new Emp4("10","Kolkata","27"),
});
List<Emp4> chennaiList = Arrays.asList(new Emp4[] {
new Emp4("4","Chennai","18"),new Emp4("7","Chennai","35"),
});
List<List<Emp4>> masterList = new ArrayList<>();
masterList.add(mumbaiList);
masterList.add(delhiList);
masterList.add(kokataList);
masterList.add(chennaiList);
//Example : With list of list
List<String> empIdList = masterList.stream().flatMap(x->x.stream()).map(x->x.getId()).collect(Collectors.toList());
masterList.stream().flatMap(x->x.stream()).map(x->x.getId()).forEach(System.out::println);
// masterList.parallelStream().flatMap(x->x.parallelStream()).map(x->x.getId()).forEach(System.out::println);
String[][] array = new String[][]{{"a", "b"}, {"c", "d"}, {"e", "f"}};
///Exmaple : With multidimentional array
List<String> idList = Arrays.stream(array).flatMap(x->Arrays.stream(x)).collect(Collectors.toList());
Arrays.stream(array).flatMap(x->Arrays.stream(x)).forEach(System.out::println);
}
}
class Emp4{
private String id;
private String city;
private String age;
public Emp4(String id, String city, String age) {
super();
this.id = id;
this.city = city;
this.age = age;
}
public String getId() {return id;}
public String getCity() {return city;}
public String getAge() {return age;}
@Override
public String toString() {
return "Emp [id=" + id + ", city=" + city + ", age=" + age + "]";
}
}
Reference :