概述
刚开始学习flatMap(扁平化处理)的时候,是有点懵的,对其的应用的场景是模糊的。真的遇上了,就真的明白了怎么样了。学习的时候,可能只记得其作用,这样也行,后面用的时候,再进一步学习,有应用的场景,就容易记住。有时间再加一些变化,多折腾下,学会如何使用及其适用的场景
1,flatMap的使用:
1,数组Array的flatMap:
String[] oneArr = new String[]{"10111011001", "10119910001"};
String[] twoArr = new String[]{"11111017501", "10119910001"};
System.out.println(Arrays.toString(mergeArr(oneArr, twoArr)));
System.out.println(mergeArrToList(oneArr, twoArr).toString());
@SafeVarargs
private static String[] mergeArr(String[]... arrs) {
return Arrays.stream(arrs).filter(Objects::nonNull).flatMap(Arrays::stream).distinct()
.toArray(String[]::new);
}
@SafeVarargs
private static List<String> mergeArrToList(String[]... arrs) {
return Arrays.stream(arrs).filter(Objects::nonNull).flatMap(Arrays::stream).distinct()
.collect(Collectors.toList());
}
2,集合List的flatMap
List<String> oneList = Arrays.asList("10111011001", "10119910001");
List<String> twoList = Arrays.asList("11111017501", "10119910001");
System.out.println(mergeList(oneList, twoList).toString());
System.out.println(Arrays.toString(mergeListToArry(oneList, twoList)));
@SafeVarargs
private static List<String> mergeList(List<String>... arrs) {
return Arrays.stream(arrs).filter(Objects::nonNull).flatMap(Collection::stream).distinct()
.collect(Collectors.toList());
}
@SafeVarargs
private static String[] mergeListToArry(List<String>... arrs) {
return Arrays.stream(arrs).filter(Objects::nonNull).flatMap(Collection::stream).distinct()
.toArray(String[]::new);
}
3,对象的集合的flatMap
场景:比如获取班级里面,学生已经选修的课程(多门选修课,每个学生可以选修三门)
辅助类Student:
public class Student {
private long id;
private String name;
private String course;
public Student(long id, String name, String course) {
this.id = id;
this.name = name;
this.course = course;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCourse() {
return course;
}
public void setCourse(String course) {
this.course = course;
}
}
处理:
// 先通过map获取到课程的信息,分离出选择的课程,或是用flatMap也先汇聚,再进行分离:
List<Student> studentList = new ArrayList<>();
studentList.add(new Student(1L,"张三", "网页设计,围棋,日语"));
studentList.add(new Student(2L,"李四", "网页设计,营养学,篮球"));
studentList.add(new Student(3L,"王五", "数学建模,象棋,法语"));
studentList.add(JSON.parseObject("{"id":4,"name":"赵六","course":"体能,画画,瑜伽"}", Student.class));
private static List<String> mergeSelectCourseMap(List<Student> studentList) {
return ListUtils.emptyIfNull(studentList).stream().map(e -> e.getCourse().split(",")).flatMap(Arrays::stream).distinct()
.collect(Collectors.toList());
}
private static List<String> mergeSelectCourseFlatMap(List<Student> studentList) {
return ListUtils.emptyIfNull(studentList).stream().map(Student::getCourse).flatMap(e -> Arrays.stream(e.split(","))).distinct()
.collect(Collectors.toList());
}
总结:
flatMap还是比较好用的,也相对简单些,遇到要用场景,理解起来就简单多了。注意数据类型是数组还是集合就知道怎么用了。
(PS: 在声明具有模糊类型(比如:泛型)的可变参数的构造函数或方法时,Java编译器会报unchecked警告。鉴于这些情况,如果程序员断定声明的构造函数和方法的主体不会对其varargs参数执行潜在的不安全的操作,可使用@SafeVarargs进行标记,这样的话,Java编译器就不会报unchecked警告。)
最后
以上就是儒雅小丸子为你收集整理的JAVA8 中的Stream的flatMap 的使用1,flatMap的使用:的全部内容,希望文章能够帮你解决JAVA8 中的Stream的flatMap 的使用1,flatMap的使用:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复