点击上方 "程序员小乐"关注, 星标或置顶一起成长
每天凌晨00点00分, 第一时间与你相约
每日英文
Strength isn't about how much you can handle before you break, it's about how much you can handle after you break.
坚强不是看你在崩溃前有多能掌控一切,而是你崩溃后如何收拾残局。
每日掏心话
生命是一场遇见,有些人,有些物,一旦遇见,便一眼万年。不要着急,慢一些,你想要的,你想遇见的,岁月都会赠予你。
来自:坚持就是胜利 | 责编:乐乐
链接:juejin.im/post/5d5e2616f265da03b638b28a
![2c277f4057e4f1e3600520b41d6a7b12.png](https://img-blog.csdnimg.cn/img_convert/2c277f4057e4f1e3600520b41d6a7b12.png)
程序员小乐(ID:study_tech)第 774 次推文 图片来自百度
往日回顾:你连 HTTPS 原理都不懂,还讲“中间人攻击”?
正文
简介
java8也出来好久了,接口默认方法,lambda表达式,函数式接口,Date API等特性还是有必要去了解一下。比如在项目中经常用到集合,遍历集合可以试下lambda表达式,经常还要对集合进行过滤和排序,Stream就派上用场了。用习惯了,不得不说真的很好用。
Stream作为java8的新特性,基于lambda表达式,是对集合对象功能的增强,它专注于对集合对象进行各种高效、便利的聚合操作或者大批量的数据操作,提高了编程效率和代码可读性。
Stream的原理:将要处理的元素看做一种流,流在管道中传输,并且可以在管道的节点上处理,包括过滤筛选、去重、排序、聚合等。元素流在管道中经过中间操作的处理,最后由最终操作得到前面处理的结果。
集合有两种方式生成流:
stream() − 为集合创建串行流
parallelStream() - 为集合创建并行流
![34f9bd999be4f881dd6fbd10ea27b669.png](https://img-blog.csdnimg.cn/img_convert/34f9bd999be4f881dd6fbd10ea27b669.png)
上图中是Stream类的类结构图,里面包含了大部分的中间和终止操作。
中间操作主要有以下方法(此类型方法返回的都是Stream):map (mapToInt, flatMap 等)、 filter、 distinct、 sorted、 peek、 limit、 skip、 parallel、 sequential、 unordered
终止操作主要有以下方法:forEach、 forEachOrdered、 toArray、 reduce、 collect、 min、 max、 count、 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 iterator
举例说明
首先为了说明Stream对对象集合的操作,新建一个Student类(学生类),覆写了equals()和hashCode()方法
public class Student {
private Long id;
private String name;
private int age;
private String address;
public Student() {}
public Student(Long id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +