我是靠谱客的博主 粗心小松鼠,这篇文章主要介绍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
38
package 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
30
public 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
15
public 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
13
public 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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部