我是靠谱客的博主 粗心小松鼠,这篇文章主要介绍java Stream API 配合Lambda表达式--JDK1.8新特性思维导图学习感悟Stream API 的流水线思想(懒加载),现在分享给大家,希望可以做个参考。
思维导图
学习感悟
JDK1.8以后对集合操作提供了一些新的API,使用起来比较便利,除了代码可读性差一点(即lambda表达式),个人感觉值得学习。 例如下面分组需求:一个集合中存放多个学生对象,我需要根据学生性别分组,学生类如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38package org.ymh.demo; public class Student { private String name; private String sex; private String address; public Student(String name, String sex, String address) { this.name = name; this.sex = sex; this.address = address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
传统方式:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30public class Demo { public static void main(String[] args) { List<Student> students = Arrays.asList( new Student("张三", "男", "西安"), new Student("李四", "男", "西安"), new Student("王五儿", "女", "北京"), new Student("赵六儿", "女", "上海"), new Student("苏七", "男", "杭州") ); HashMap<String, List<Student>> map = new HashMap<>(); for (Student student : students) { if (student.getSex() == "男") { List<Student> list = map.get("男"); if (list == null) { list = new ArrayList<>(); map.put("男", list); } list.add(student); } else { List<Student> list2 = map.get("女"); if (list2 == null) { list2 = new ArrayList<>(); map.put("女", list2); } list2.add(student); } } System.out.println(map); }
接下来我们用Stream API中提供的方法改写
Collectors中的groupingby()方法可以实现按需求分组
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public class Demo { public static void main(String[] args) { List<Student> students = Arrays.asList( new Student("张三", "男", "西安"), new Student("李四", "男", "西安"), new Student("王五儿", "女", "北京"), new Student("赵六儿", "女", "上海"), new Student("苏七", "男", "杭州") ); Map<String, List<Student>> map = students.stream().collect(Collectors.groupingBy((s) -> s.getSex() )); System.out.println(map); } }
利用lambda表达式配合流方法,简单的一行代码就实现了这个需求。
IntStream对整数进行操作
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13public class Demo { public static void main(String[] args) { //求最大值 System.out.println(IntStream.of(45,32,65,95,7,85).max()); //求最小值 System.out.println(IntStream.of(45,32,65,95,7,85).min()); //求平均值 System.out.println(IntStream.of(45,32,65,95,7,85).average()); //求和 System.out.println(IntStream.of(45,32,65,95,7,85).sum()); } }
利用这个方法我们就不需要将整数先存入集合,遍历集合,比较大小,累加,求平均值等操作了。
Stream API 的流水线思想(懒加载)
Pipeline 流水线思想:流中的数据时流动的,而且是一个一个处理的,一个不处理完成,下一个绝对不会被处理。即每个数据会经过后续的filter, map等方法依次调用。没有遇到终结方法,以上方法也不会执行。
常见的终结方法:collect()、sum()、max()、min()等
最后
以上就是粗心小松鼠最近收集整理的关于java Stream API 配合Lambda表达式--JDK1.8新特性思维导图学习感悟Stream API 的流水线思想(懒加载)的全部内容,更多相关java内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复