1、java8中Stream流以及lambda的使用:

stream可以将需要处理的集合元素看做流操作,是结合对象功能的一个增强;

lambda表达式与stream结合使用,可以更好的对集合进行遍历、筛选、排序、聚合、分组;

stream特性:不存储数据,只是对数据的记忆性运算;不会改变原数据源,但是会生成一个新的集合或其他值;

2、应用场景:
    2.1、测试类:

    @Datapublic class pre {private String name;private Integer age;private String sex;}

2.2、初始化数据:

    public  List<pre> init() {List<pre> list = new ArrayList<>();for (int i = 0; i < 10; i++) {pre pre = new pre();if (i < 5) {pre.setName("a" + i);pre.setAge(i);pre.setSex("男");} else {pre.setName("a" + i);pre.setAge(i);pre.setSex("女");}list.add(pre);}return list;}

2.3、遍历输出:

方式一:stream

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);list.stream().forEach(System.out::println);

方式二:forEach

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);list.forEach(System.out::println);

2.4、获取数量:

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);long count = list.stream().count();System.out.println(count);

2.5、获取最大值:

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);Integer max = list.stream().max(Integer::compareTo).get();System.out.println(max);

2.6、获取最小值:

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);Integer min = list.stream().min(Integer::compareTo).get();System.out.println(min);

2.7、任意条件:

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);boolean res = list.stream().anyMatch(i -> i > 5);System.out.println(res);

2.8、全部条件:

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);boolean res = list.stream().allMatch(i -> i % 2 == 0);System.out.println(res ? "全部都是偶数" : "不全是偶数");

2.9、条件遍历输出:

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);list.stream().filter(i -> i > 5).forEach(System.out::println);

2.10、条件遍历输出第一条数据:

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);Integer res = list.stream().filter(i -> i > 5).findFirst().get();System.out.println(res);

2.11、条件筛选并放到新的容器中:

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);List<Integer> res = list.stream().filter(i -> i > 5).collect(Collectors.toList());System.out.println(res);

2.12、去重并输出:

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 6, 7);List<Integer> res = list.stream().distinct().collect(Collectors.toList());System.out.println(res);

2.13、返回固定的长度:

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 6, 7);List<Integer> res = list.stream().limit(5).collect(Collectors.toList());System.out.println(res);

2.14、去掉指定长度:

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 6, 7);List<Integer> res = list.stream().skip(5).collect(Collectors.toList());System.out.println(res);

2.15、计算集合元素之和:

方式一:

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 6, 7);Integer res = list.stream().reduce(0, (a, b) -> a + b);System.out.println(res);

方式二:

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 6, 7);Integer res = list.stream().reduce(0, Integer::sum);System.out.println(res);

2.16、集合中最大值:(这个以reduce的第一个参数和集合中作对比):

    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 6, 7);Integer res = list.stream().reduce(0, Integer::max);System.out.println(res);

2.17、map映射-根据某个对象属性分组(利用2.1的对象来作为实体类,利用2.2初始测试数据):

    Map<String, List<pre>> res = list.stream().collect(Collectors.groupingBy(pre::getSex));System.out.println(res);

2.18、map映射-将对象某个属性取出,并合并(利用2.1的对象来作为实体类,利用2.2初始测试数据):

    String res = list.stream().map(pre::getName).collect(Collectors.joining("--"));System.out.println(res);

2.19、排序:

    List<Integer> list = Arrays.asList(1, 2, 3, 7, 5, 6, 6, 4);List<Integer> res = list.stream().sorted().collect(Collectors.toList());System.out.println(res);

2.20、指定字段正序排序(利用2.1的对象来作为实体类,利用2.2初始测试数据):

     List<pre> res=list.stream().sorted(Comparator.comparing(pre::getAge)).collect(Collectors.toList());System.out.println(res);

2.21、指定字段倒序排序(利用2.1的对象来作为实体类,利用2.2初始测试数据):

    List<pre> sortReverseRlt=list.stream().sorted(Comparator.comparing(pre::getAge).reversed()).collect(Collectors.toList());System.out.println(res);

2.22、多属性组合排序,指定字段1,指定字段2

2.22.1、初始化数据

    public  List<pre> init() {List<pre> list = new ArrayList<>();for (int i = 0; i < 10; i++) {pre pre = new pre();if (i < 5) {pre.setName("a" + i);pre.setAge(Integer.valueOf((int) (Math.random() * 100)));pre.setSex("男");} else {pre.setName("a" + i);pre.setAge(0);pre.setSex("女");}list.add(pre);}return list;}

2.22.2、先按照age正序排序,再按照name正序排序(利用2.22.1初始化数据)

    List<pre> res=list.stream().sorted(Comparator.comparing(pre::getAge).thenComparing(pre ::getName)).collect(Collectors.toList());System.out.println(res);

2.22.3、先按照age倒序排序,再按照name正序排序(利用2.22.1初始化数据)

    List<pre> res=list.stream().sorted(Comparator.comparing(pre::getAge).reversed().thenComparing(pre ::getName)).collect(Collectors.toList());System.out.println(res);

2.22.4、先按照age正序排序,再按照name倒序排序(利用2.22.1初始化数据)

    List<pre> res=list.stream().sorted(Comparator.comparing(pre::getAge).thenComparing(pre ::getName).reversed()).collect(Collectors.toList());System.out.println(res);

Java中Stream详细使用教程相关推荐

  1. Java中Stream的使用

    Java中Stream的使用 请先了解Lambda表达式的用法,有一定Lambda基础后再进行Stream学习. Lambda博文链接:Lambda表达式的详解 本文来自于B站博主:倜傥的雷哥 的视频 ...

  2. java中Cookie详细介绍

    Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是 ...

  3. Java中注解学习系列教程-2

    简介 在上一篇文章中,我们讲解了:Java中注解的定义.JDK中内置注解.第三方注解.本文是注解系列教程中的第二篇.来看看今天主要内容:1:注解的分类2:元注解说明3:自定义注解声明一:注解的分类注解 ...

  4. Java中注解学习系列教程-1

    前言: 我们为什么要学习注解? 注解是我们的编程更简洁明了.spring boot的流行也带动了注解.spring boot中就使用了大量的注解来减少配置.我们在使用spring boot开发时候,感 ...

  5. 学习笔记(一):Java中Stream的基本用法和相关API详解

    目录 引言 一.什么是Stream 二.Stream有什么用 三.Stream的分类 四.常用的Stream创建方法 1. Stream.of()方法 2. Arrays.stream() 3. 集合 ...

  6. java中Stream流

    一 概述 数据渠道.管道,用于操作数据源(集合.数组等)所生成的元素序列. 集合讲的是数据,流讲的是计算 即一组用来处理数组,集合的API. 二 Stream特点 1 Stream 不是数据结构,没有 ...

  7. java中stream基础方法的使用

    1.java中的stream流,实际上是方便于我们对集合中的元素进行筛选操作,流可包含两个操作,一为中间操作intermediate operation,主要用于筛选,过滤数据,二为终端操作termi ...

  8. java中stream跳出循环_Java 8:用Stream来循环集合

    正如我之前所写的,Java 8中的新功能特性改变了游戏规则.对Java开发者来说这是一个全新的世界,并且是时候去适应它了. 在这篇文章里,我们将会去了解传统循环的一些替代方案.在Java 8的新功能特 ...

  9. Java 开发Log4j 详细使用教程

    2019独角兽企业重金招聘Python工程师标准>>> 日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录.在apache网 ...

最新文章

  1. 工作总结 Rezor 里面的一些小知识----自定义类型 放在标签值中 会直接跳过去...
  2. ThinkPHP 3.2.3 视图模型的使用
  3. kissy 淘宝网脚本库
  4. NeurIPS2021 VALUE:快来刷榜吧!微软提出视频多模态新基准,同时含检索、caption、QA等多个任务!...
  5. 统计学基础一:基础概念
  6. 再见,中关村“金三角”!
  7. 从简单的 XSS 到完整的 Google Cloud Shell 实例接管,值5000美元
  8. SQL笔试之盘古开天
  9. cf 165 div2 解题报告
  10. 11.看板方法---建立服务水平协议
  11. k3cloud新建简单帐表教程
  12. PAT1104 Sum of Number Segments精度问题
  13. [QT入门篇]编程基础知识
  14. Redis中文学习文档redis.cn
  15. Navicat连接Mysql方法教程
  16. SylixOS -- 双网卡冗余备份使用说明
  17. 联想微型计算机u盘启动,联想ThinkCentre一体机如何设置U盘启动_联想ThinkCentre电脑怎样从USB启动...
  18. Pycharm修改快捷键:后退键和前进键
  19. 谢惠民恽自求易法槐钱定边数学分析习题课讲义第2版上册全部思考题练习题参考题解答...
  20. easyExcel 导出自动添加序号

热门文章

  1. ClickHouse 使用EXPLAIN 分析 SQL 执行计划
  2. 【九天教您南方cass 9.1】 04 编码法Ⅱ绘制地形图
  3. android assets资源使用——深入浅出
  4. 新版H5盲盒商城系统源码(前端uniapp后端thinkphp)+详细安装教程+数据库
  5. 一行一行的读取txt中文文本(解决乱码问题)
  6. 【讨论】品质因数,-从二阶传递函数分析自然谐振频率的含义。
  7. 485通信原理_上位机开发之单片机通信实践(一)
  8. 王道计算机考研机试指南刷题笔记-自用3
  9. vba传值调用_VBA 过程和函数:传递参数教程和实例
  10. 2022考研王道计算机408pdf(王道计算机组成原理+王道操作系统+王道计算机网络+王道数据结构)