哈喽!大家好,我是【学无止境小奇】,一位热爱分享各种技术的博主!



【学无止境小奇】的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过。



【学无止境小奇】的博客中所有涉及命令、代码的地方,除了提供图片供大家参考,另外会在图片下方提供一份纯文本格式的命令或者代码方便大家粘贴复制直接执行命令或者运行代码。



如果你对技术有着浓厚的兴趣,欢迎关注【学无止境小奇】,欢迎大家和我一起交流。



️️️感谢各位朋友接下来的阅读️️️

@

一、前期准备

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()));

最新文章

  1. Linux环境搭建-在虚拟机中安装Centos7.0
  2. jcl-over-slf4j log桥接工具简介
  3. python json操作
  4. C语言 数组 行优先 实现
  5. 关于meta知多少
  6. JQuery-Table斑马线
  7. 浅谈Android应用性能之内存
  8. ORACLE11G RAC 施加以分离不同的实例.TAF
  9. map,set的模板[STL]
  10. ul中li分列显示
  11. 杭电ACM 1004题
  12. asp.net core系列 32 EF查询数据 必备知识(1)
  13. poj3268 Silver Cow Party(两次dijkstra)
  14. 个人博客作业Week3(微软必应词典客户端的案例分析)
  15. 洛谷P4281 紧急会议
  16. 【java】public,private和protected
  17. app与jvm 反向代理时config的设置(用于在web页面显示npm(就如tomcat)产生的页面)
  18. 嵌入式开发之hi3519--- pcie dma和dma cache 缓存更新sync memery
  19. 【cs229-Lecture3】为什么要选择“最小二乘法”这个指标
  20. javascript 原型世界浅析

热门文章

  1. API 网关功能
  2. Redis 的 3 种集群方案对比
  3. 「Codeforces 468C」Hack it!
  4. 「算法笔记」树形 DP
  5. 漫谈grpc 3:从实践到原理,带你参透 gRPC
  6. 为什么操作dom会消耗性能
  7. versions-maven-plugin插件批量修改版本号
  8. Elasticsearch安装X-Pack插件
  9. C#自定义转换(implicit 或 explicit)
  10. 怎样从 bat 批处理文件调用 PowerShell 脚本