Java8之Stream常用操作方式
哈喽!大家好,我是【学无止境小奇】,一位热爱分享各种技术的博主!
【学无止境小奇】的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过。
【学无止境小奇】的博客中所有涉及命令、代码的地方,除了提供图片供大家参考,另外会在图片下方提供一份纯文本格式的命令或者代码方便大家粘贴复制直接执行命令或者运行代码。
如果你对技术有着浓厚的兴趣,欢迎关注【学无止境小奇】,欢迎大家和我一起交流。
️️️感谢各位朋友接下来的阅读️️️
@
一、前期准备
1、创建对象
1.1、Student

public class Student {
private int id;
private String name;
private String sex;
private int age;
public Student(int id, String name, String sex, int age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}
2、初始化数据
2.1、初始化集合

public class StreamTest {
List<Student> studentList = Arrays.asList(
new Student(1,"张三","男",20),
new Student(2,"李四","男",25),
new Student(3,"王五","女",18),
new Student(4,"赵六","女",26)
);
}
二、Stream常用操作方式
1、筛选
1.1、filter
filter从集合中过滤某些元素,例如查询集合中年龄大于20的数据集合

//查询年龄大于20的数据集合
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.collect(Collectors.toList());
1.2、limit
limit,和mysql中的limit类似,返回指定数量的数据

//查询年龄大于20的1个数据
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.limit(1)
.collect(Collectors.toList());
1.3、skip
skip,跳过元素,返回一个跳过前n个元素的集合

//查询年龄大于20的数据,前一个不要
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.skip(1)
.collect(Collectors.toList());
1.4、distinct
distinct,筛选,通过元素的hashCode()和equals()去除重复元素

//查询年龄大于20的数据,并去重
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.distinct()
.collect(Collectors.toList());
2、映射
2.1、map
map,将集合元素转换成其他形式返回,接收一个函数作为参数,该函数作用到每一个元素上,并将其映射成一个新的元素

//查询年龄大于20的数据,只获取姓名集合
List<String> list = studentList.stream()
.filter(s -> s.getAge()>20)
.map(Student::getName)
.collect(Collectors.toList());
3、排序
3.1、sorted()
sorted()自然排序

//查询年龄大于20的数据,只获取姓名,并排序
List<String> list = studentList.stream()
.filter(s -> s.getAge()>20)
.map(Student::getName)
.sorted()
.collect(Collectors.toList());
3.2、sorted(Comparator com)定制排序
sorted(Comparator com)定制排序,定制输入排序规则

//查询年龄大于20的数据,并根据姓名排序
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.sorted((e1,e2) -> {
return e1.getName().compareTo(e2.getName());
})
.collect(Collectors.toList());
4、查找与匹配
4.1、allMatch
allMatch检查是否匹配所有元素

//判断集合中所有的姓名是否都等于"张三"
boolean flag = studentList.stream()
.allMatch((e) -> e.getName().equals("张三"));
4.2、anyMatch
anyMatch是否匹配至少一个元素

//判断集合中是否至少有一个姓名等于"张三"
boolean flag = studentList.stream()
.anyMatch((e) -> e.getName().equals("张三"));
4.3、noneMatch
noneMatch检查是否没有匹配所有元素

//判断集合中是否没有匹配所有元素姓名等于"张三"
boolean flag = studentList.stream()
.noneMatch((e) -> e.getName().equals("张三"));
4.4、findFirst
findFirst返回第一个元素

//返回集合中第一个元素
Optional<Student> student = studentList.stream()
.findFirst();
4.5、findAny
findAny返回当前集合中的任意元素

//返回集合中任意一个元素
Optional<Student> student = studentList.stream()
.findAny();
4.6、conut
conut返回流中元素的总个数

//返回集合的数量
long num = studentList.stream()
.count();
4.7、max
返回流中最大值

//返回集合中年龄最大的一条数据
Optional<Student> student = studentList.stream()
.max((e1,e2) -> Integer.compare(e1.getAge(),e2.getAge()));
4.8、min
返回流中最小值

//返回集合中年龄最大的一条数据
Optional<Student> student = studentList.stream()
.min((e1,e2) -> Integer.compare(e1.getAge(),e2.getAge()));
Java8之Stream常用操作方式的更多相关文章
- Java8的Stream API使用
前言 这次想介绍一下Java Stream的API使用,最近在做一个新的项目,然后终于可以从老项目的祖传代码坑里跳出来了.项目用公司自己的框架搭建完成后,我就想着把JDK版本也升级一下吧(之前的项目, ...
- Java8使用Stream优雅地处理集合
说明 集合和数组是我们经常会用到的数据结构,在jdk1.8之前,集合和数组的处理并不是很便捷.但是到了JDK1.8之后,使用Stream处理集合会使代码变得更加的简洁明了.作为一名开发者,其实很有必要 ...
- Stream常用操作以及原理探索
Stream常用操作以及原理 Stream是什么? Stream是一个高级迭代器,它不是数据结构,不能存储数据.它可以用来实现内部迭代,内部迭代相比平常的外部迭代,它可以实现并行求值(高效,外部迭代要 ...
- Java8的Stream方法findAny空指针异常(NullPointerException)实例对比
实战介绍 学习完Java8的Stream方法,可能你正准备大展身手,却发现遇到不少问题,本篇文章为大家带来一个findAny方法抛出java.lang.NullPointerException的场景. ...
- java8的stream功能及常用方法
Java8中stream对集合操作做了简化,用stream操作集合能极大程度简化代码.Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后就用尽了. 一. ...
- Java8 Lambda/Stream使用说明
一.Stream流1. 流的基本概念 1.1 什么是流?流是Java8引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合.众所周知,集合操作非常麻烦,若要对集合进行筛选.投影,需要 ...
- Java8的Stream语法详解(转载)
1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...
- Java8的Stream流(一) --- 基础用法
Java8中的Stream Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象. Stream的特性及优点: 无存储. Stream不是一种数据 ...
- Java8之Stream/Map
本篇用代码示例结合JDk源码讲了Java8引入的工具接口Stream以及新Map接口提供的常用默认方法. 参考:http://winterbe.com/posts/2014/03/16/java ...
随机推荐
- 「算法笔记」Min_25 筛
戳 这里(加了密码).虽然写的可能还算清楚,但还是不公开了吧 QwQ. 真的想看的 私信可能会考虑给密码 qwq.就放个板子: //LOJ 6053 简单的函数 f(p^c)=p xor c #inc ...
- Electron-Vue 项目使用Element的el-table组件不显示
1.electron-vue文件夹下的webpack.renderer.config.js配置文件,你会找到这样一行代码,需要添加白名单! let whiteListedModules = ['vue ...
- CS5212Capstone|DP转VGA方案设计芯片|CS5212设计资料
CS5212是台湾CAPSTONE最新开发出一款用于DP转VGA方案设计芯片,其周围器件较少,设计简单,整体BOM成本低,市场性价比较高. CS5212内置MCU是工业标准8051核心单片机处理器.C ...
- Reflection 基础知识(二)
Proxy 定义 Proxy用于修改对象的某些行为,获取值,设置值等 let p = new Proxy(target, handler); target 用Proxy包装的目标对象(可以是任何类型的 ...
- Java初学者作业——使用记事本编写Java程序
返回本章节 返回作业目录 需求说明: 使用记事本编写 Java 程序,输出"大家好!我的梦想是做一名 Java 高级工程师!". 为 Java 程序添加单行和多行注释以及文档注释. ...
- 美和易思 MOOT去鼠标检测,快进,倍速,自动下一章
F12 放到 console 直接运行即可 或者油猴添加新脚本 核心去除网页绑定焦点事件代码: if (!-[1,] && !window.XMLHttpRequest || navi ...
- OAuth2.0的定义
1. 什么是OAuth2.0 * 用于REST/APIs的代理授权框架(delegated authorization) * 基于令牌Token的授权,在无需暴露用户密码的情况下,使应用能获取对用户数 ...
- unittest_skip跳过用例执行(3)
在执行测试用例时,有时候有些用例是不需要执行的,比如版本迭代用例弃用,测试周期短只需要执行优先级高的用例,那我们怎么办呢?难道删除这些用例?那下次执行时如果又需要执行这些用例时,又把它补回来?这样操作 ...
- java 代理模式 总结
1.前言 最近舍友去面试遇到了关于java代理模式的问题. 我虽然知道怎么使用,但是没有做过正经的总结,因此有了这篇随笔,好好总结一下三大代理模式底层原理. 事实上,在开发项目的时候,基本用不上代理, ...
- 一文搞懂Flink Window机制
Windows是处理无线数据流的核心,它将流分割成有限大小的桶(buckets),并在其上执行各种计算. 窗口化的Flink程序的结构通常如下,有分组流(keyed streams)和无分组流(non ...