我是靠谱客的博主 粗心小松鼠,最近开发中收集的这篇文章主要介绍java Stream API 配合Lambda表达式--JDK1.8新特性思维导图学习感悟Stream API 的流水线思想(懒加载),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
思维导图
学习感悟
JDK1.8以后对集合操作提供了一些新的API,使用起来比较便利,除了代码可读性差一点(即lambda表达式),个人感觉值得学习。 例如下面分组需求:一个集合中存放多个学生对象,我需要根据学生性别分组,学生类如下:
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;
}
}
传统方式:
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()方法可以实现按需求分组
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对整数进行操作
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 Stream API 配合Lambda表达式--JDK1.8新特性思维导图学习感悟Stream API 的流水线思想(懒加载)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复