Java8 Stream流API常用操作
Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些常用的Stream流操作;
Stream流简介
A sequence of elements supporting sequential and parallel aggregate operations. Stream流是一个来自数据源的元素队列并支持聚合操作
Stream流中常用方法的分类
- 1.中间操作
- 2.终止操作
Stream的常用中间操作
- 1.peek()--消费流中的每一个元素
List<Integer> list = Arrays.asList(6, 5, 5, 1, 4);
list.stream().peek(i -> System.out.println(i)).forEach(i-> System.out.println(i));
- 2.map() mapToInt() mapToDouble()等等--将流中的每一个元素映射为另一个元素
int[] nums={1,2,3,5,6};
int sum = IntStream.of(nums).map(i->i*2).sum();
- 3.filter()--将流中满足要求的元素过滤出来
List<Integer> list = Arrays.asList(6, 5, 5, 1, 4);
list.stream().filter(integer -> integer>1).forEach(System.out::println);
- 4.sort()--将流中的元素按一定的规则排序
List<Integer> list = Arrays.asList(6, 5, 5, 1, 4);
List<Integer> collect = list.stream().sorted((o1, o2) -> o1 - o2).collect(Collectors.toList());
- 5.distinct()--去重
List<Integer> list = Arrays.asList(6, 5, 5, 1, 4);
list.stream().dinstinct().forEach(System.out::println)
- 6.limit()--截断流只保留指定个数的元素
List<Integer> list = Arrays.asList(6, 5, 5, 1, 4);
list.stream().limit(1).forEach(System.out::println);
Stream的常用的终止操作
- 1.count()-获取流中元素的个数
List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
long count = list.stream().count();
- 2.reduce()-将流中所有的元素合并为一个元素,可用于累加求和,求乘积等等
List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
Integer reduce = list.stream().reduce((integer, integer2) -> integer + integer2).get();
- 3.forEach()-遍历流中的所有元素
List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
list.stream().forEach(System.out::println);
- 4.max()-求出流中元素的最大值
List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
Integer max = list.stream().max((s1, s2) -> s1 - s2).get();
- 5.min()-求出流中元素的最小值
List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
Integer min = list.stream().max((o1, o2) -> o2 - o1).get();
- 6.anyMaych()/allMatch()/noneMatch()--匹配元素中的值,返回boolean类型
List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
boolean b = list.stream().noneMatch((x) -> x.intValue() == 1);
boolean b = list.stream().allMatch((x) -> x.intValue() == 1);
boolean b = list.stream().anyMatch((x) -> x.intValue() == 1);
- 7.collect()--收集流中的元素通过Collectors这个工具类处理
List<Integer> list = Arrays.asList(1, 2, 3, 5, 6);
//求平均数
Double average= list.stream().collect(Collectors.averagingInt(x -> x.intValue()));
//求分组
Double average= list.stream().collect(Collectors.groupinngby(x -> x.intValue()));
//收集成一个List
List<Integer> collect = list.stream().sorted((o1, o2) -> o1 - o2).collect(Collectors.toList());
- 8.summerizing() summerizing中封装了很多计算的方法,例如 求和,求平均数等等
Double sum_= list.stream().collect(Collectors.summarizingInt(value -> value.intValue())).getAve
Java8 Stream流API常用操作的更多相关文章
- 【JDK8】Java8 Stream流API常用操作
Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...
- 【转】Java8 Stream 流详解
当我第一次阅读 Java8 中的 Stream API 时,说实话,我非常困惑,因为它的名字听起来与 Java I0 框架中的 InputStream 和 OutputStream 非常类似.但是 ...
- Java8——Stream流式操作的一点小总结
我发现,自从我学了Stream流式操作之后,工作中使用到的频率还是挺高的,因为stream配合着lambda表达式或者双冒号(::)使用真的是优雅到了极致!今天就简单分(搬)享(运)一下我对strea ...
- Java8 Stream流方法
流是Java API的新成员,它允许以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现).就现在来说,可以把它们看成遍历数据集的高级迭代器.此外,流还可以透明地并行处理,无需写任何多 ...
- Java8 Stream流
第三章 Stream流 <Java8 Stream编码实战>的代码全部在https://github.com/yu-linfeng/BlogRepositories/tree/master ...
- Java9系列第6篇-Stream流API的增强
我计划在后续的一段时间内,写一系列关于java 9的文章,虽然java 9 不像Java 8或者Java 11那样的核心java版本,但是还是有很多的特性值得关注.期待您能关注我,我将把java 9 ...
- Stream流的这些操作,你得知道,对你工作有很大帮助
Stream流 Stream(流)是一个来自数据源的元素队列并支持聚合操作: 元素是特定类型的对象,形成一个队列. Java中的Stream并不会存储元素,而 是按需计算. 数据源 流的来源. 可以是 ...
- 关于Java8 Stream流的利与弊 Java初学者,大神勿喷
题目需求: 1:第一个队伍只要名字为3个字成员的姓名,存储到新集合 2:第一个队伍筛选之后只要前3人:存储到一个新集合 3:第2个队伍只要姓张的成员姓名:存储到一个新集合 4:第2个队伍不要前2人,存 ...
- Java8 Stream 流使用场景和常用操作
JAVA8内置的函数式编程接口应用场景和方式 pojo类对象和默认创建list的方法 import lombok.AllArgsConstructor; import lombok.Data; imp ...
随机推荐
- Go 迭代切片
迭代切片有两种方式: 1. 使用 for range 迭代切片 // 其长度和容量都是 4 个元素 slice := [], , , } // 迭代每一个元素,并显示其值 for index, v ...
- 【串线篇】Mybatis缓存简介
缓存:暂时的存储一些数据:加快系统的查询速度... CPU: 主频:4-2.7GHZ 内存:4G-8G 1333MHZ 2166MHZ CPU:一级缓存(4MB):二级缓存 (16MB); ...
- 使用axios上传文件到阿里云对象文件存储服务器oss
背景 OSS可用于图片.音视频.日志等海量文件的存储.各种终端设备.Web网站程序.移动应用可以直接向OSS写入或读取数据.OSS支持流式写入和文件写入两种方式.使用阿里云oss做文件存储的时候,不可 ...
- Java中的两种异常类型及其区别?
Java中的两种异常类型是什么?他们有什么区别? Throwable包含了错误(Error)和异常(Excetion两类) Exception又包含了运行时异常(RuntimeException, 又 ...
- C#高级编程笔记(22至25章节)文件\注册表\权限\事务
22安全(using System.Security.Principal;) AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.Wi ...
- 网云穿-SpringBoot项目映射外网
网云穿-最简单易用的内网穿透软件,最简洁教程一键穿透网站.数据库.远程桌面 网云穿,致力于打造最便捷的「内网穿透」应用 https://xiaomy.net/index.html 网云穿是一款可以在 ...
- 每天一个linux命令:less(14)
less less命令的作用与more十分相似,都可以用来浏览文字档案的内容,less 在查看之前不会加载整个文件 .用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页. ...
- 【BZOJ1801】【DTOJ2004】 [Ahoi2009]chess 中国象棋 【DP】
题解: 首先知道一个性质,每一行每一列都最多有两个炮 那么很显然是DP 设F[i][j][k]表示前i行,有j列有一个炮,有k列有两个炮,那么转移式子为 这一行什么都不做:f[i][j][k]=f[i ...
- 汇编 “error A2031”
assume cs:code code segment main: mov ax,0020h mov ds,ax ;指定段地址0200h mov dx,0h mov cx,003fh s: mov [ ...
- python练习题之计算字符串中所有字符得和
第二题:计算字符串中所有数字的和1.字符串中只有小写字母和数字2.数字可能连续,也可能不连续3.连续数字要当做一个数处s='1234adg3g11's1 = "" for i in ...