java stream 简单函数
写在前面
本文为笔者学习的一些心得,如有问题,评论请轻喷
本文分为以下部分:
中间操作
终止操作
归纳
中间操作
对 list 进行操作,返回一个新的 list
| 主要函数 | 作用 |
|---|---|
| filter | 过滤操作 |
| limit | 截取限制个数的 list |
| skip | 对 list 进行跳过操作 |
| distinct | 去重操作 |
| map | 提取 list 中的每个元素进行操作,改变原元素 |
| flatMap | 将多个流放在一个流上,然后再组合 |
| sorted | 对 list 进行排序操作,可以定制排序 |
| concat | 拼接,将两个list拼接到一个list上 |
筛选
filter
filter 对 list 中的数据进行过滤操作
List<Integer> list = Arrays.asList(1, 2, 2, 3);
List<Integer> integers = list.stream().filter(i -> i > 1).collect(Collectors.toList());
System.out.println(integers);
[2, 2, 3]
limit
limit 对 list 进行限制个数操作
List<Integer> list = Arrays.asList(1, 2, 2, 3);
list.stream().limit(2).forEach(System.out::println);
List<Integer> integers = list.stream().limit(2).map(i -> i * 3).collect(Collectors.toList());
System.out.println(integers);
1
2
[3, 6]
skip
skip 对 list 进行跳过操作
List<Integer> list = Arrays.asList(1, 2, 2, 3);
List<Integer> integers = list.stream().skip(2).collect(Collectors.toList());
System.out.println(integers);
[2, 3]
distinct
distinct 去重
List<Integer> list = Arrays.asList(1, 2, 2, 3);
List<Integer> integers = list.stream().distinct().collect(Collectors.toList());
System.out.println(integers);
[1, 2, 3]
映射
map
map 对 list 中的每个数进行操作
List<Integer> list = Arrays.asList(1, 2, 2, 3);
List<Integer> integers = list.stream().map(i -> i * i).collect(Collectors.toList());
System.out.println(integers);
[1, 4, 4, 9]
flatMap
flatMap 将多个流(一般为多维)放在一个流上,然后再组合(可以看成 降维)
Integer[][] ary = {{1,2,3,4,5},{6,7,8,9,10}};
List<Integer> integers = Arrays.stream(ary).flatMap(i -> Arrays.stream(i)).collect(Collectors.toList());
System.out.println(integers);
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
排序
sorted
sort 对 list 进行排序操作,可以定制排序
//正序排序
List<Integer> list = Arrays.asList(5,4,3,2,1);
List<Integer> integers = list.stream().sorted().collect(Collectors.toList());
System.out.println(integers);
[1, 2, 3, 4, 5]
//倒序排序
List<Integer> integers1 = integers.stream().sorted(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
}).collect(Collectors.toList());
System.out.println(integers1);
[5, 4, 3, 2, 1]
拼接
concat
concat,拼接,将两个list拼接到一个list上
List<String> list1 = Arrays.asList("1", "2");
List<String> list2 = Arrays.asList("3", "4");
List<String> list3 = Stream.concat(list1.stream(), list2.stream()).collect(Collectors.toList());
System.out.println(list3);
[1, 2, 3, 4]
终止操作
无法返回新 list
| 主要函数 | 作用 |
|---|---|
| allMatch | 检查是否所有值都匹配 |
| anyMatch | 检查是否至少匹配一个元素 |
| noneMatch | 检查是否没有一项匹配 |
| findFirst | 查找第一个元素 |
| count | 计算总数 |
| max、min | 取出最大、最小值(可自定义) |
| forEach | 迭代 list 中的每个数,和map不同,无法对原元素进行操作 |
allMatch
allMatch 检查是否所有值都匹配,返回boolean类型
List<Integer> list = Arrays.asList(1, 2, 2, 3);
System.out.println(list.stream().allMatch(x -> x < 2));
false
anyMatch
anyMatch 检查是否至少匹配一个元素,返回boolean类型
List<Integer> list = Arrays.asList(1, 2, 2, 3);
System.out.println(list.stream().anyMatch(x -> x < 2));
true
noneMatch
noneMatch 检查是否没有一项匹配,返回boolean类型
List<Integer> list = Arrays.asList(1, 2, 2, 3);
System.out.println(list.stream().noneMatch(x -> x < 2));
false
findFirst
findFirst 查找第一个
List<Integer> list = Arrays.asList(1, 2, 2, 3);
Optional<Integer> first = list.stream().findFirst();
System.out.println(first.get());
1
count
count 计算总共有多少个元素,配合其他操作(多为中间操作)使用
List<Integer> list = Arrays.asList(1, 2, 2, 3);
System.out.println(list.stream().count());
4
max、min
max 查找 list 中的最大值,可以自定义何为最大值;
min 查找 list 中的最小值,可以自定义何为最小值;
List<Integer> list = Arrays.asList(1, 2, 2, 3);
Optional<Integer> max = list.stream().max(Integer::compareTo);
System.out.println(max.get());
3
Optional<Integer> min = list.stream().min(Integer::compareTo);
System.out.println(min.get());
1
forEach
forEach 迭代 list 中的每个数
List<Integer> list = Arrays.asList(1, 2, 2, 3);
list.stream().forEach(System.out::println);
1
2
2
3
归纳
reduce
reduce(BinaryOperator<P_OUT> accumulator) 类似赫夫曼树的生成规则
首先取出前俩元素进行操作,删除前俩元素,再把得出的值压回 list 头部,上面步骤重复
List<Integer> list = Arrays.asList(1, 2, 2, 3);
Optional<Integer> reduce = list.stream().reduce((o1, o2) -> o1 + o2);
// ==>
Optional<Integer> reduce1 = list.stream().reduce((o1, o2) -> {
System.out.print("o1:" + o1);
System.out.print(" o2:" + o2);
int i = o1 + o2;
System.out.print(" sum:" + i);
System.out.println();
return i;
});
System.out.println(reduce.get());
System.out.println(reduce1.get());
o1:1 o2:2 sum:3
o1:3 o2:2 sum:5
o1:5 o2:3 sum:8
8
8
reduce(final P_OUT identity, final BinaryOperator<P_OUT> accumulator) 带有初始值,与上方逻辑一致
List<Integer> list = Arrays.asList(1, 2, 2, 3);
Integer reduce = list.stream().reduce(100, (o1, o2) -> o1 + o2);
// ==>
Integer reduce1 = list.stream().reduce(100, (o1, o2) -> {
System.out.print("o1:" + o1);
System.out.print(" o2:" + o2);
int i = o1 + o2;
System.out.print(" sum:" + i);
System.out.println();
return i;
});
System.out.println(reduce);
System.out.println(reduce1);
o1:100 o2:1 sum:101
o1:101 o2:2 sum:103
o1:103 o2:2 sum:105
o1:105 o2:3 sum:108
108
108
reduce(R identity, BiFunction<R, ? super P_OUT, R> accumulator, BinaryOperator combiner)
将第一个数组经过一系列操作复制到另一个list
List<Integer> list = Arrays.asList(1, 2, 2, 3);
ArrayList<Integer> newList = new ArrayList<>();
ArrayList<Integer> integers = Stream.of(list.toArray()).reduce(newList, (o1, o2) -> {
System.out.print("o1:"+o1);
System.out.print(" o2:"+o2);
System.out.println();
o1.add((Integer)o2);
return o1;
}, (o1, o2) -> null);
System.out.println(integers);
System.out.println(newList);
o1:[] o2:1
o1:[1] o2:2
o1:[1, 2] o2:2
o1:[1, 2, 2] o2:3
[1, 2, 2, 3]
[1, 2, 2, 3]
java stream 简单函数的更多相关文章
- Java Stream 使用详解
Stream是 Java 8新增加的类,用来补充集合类. Stream代表数据流,流中的数据元素的数量可能是有限的,也可能是无限的. Stream和其它集合类的区别在于:其它集合类主要关注与有限数量的 ...
- Java Stream API性能测试
已经对Stream API的用法鼓吹够多了,用起简洁直观,但性能到底怎么样呢?会不会有很高的性能损失?本节我们对Stream API的性能一探究竟. 为保证测试结果真实可信,我们将JVM运行在-ser ...
- java stream 原理
java stream 原理 需求 从"Apple" "Bug" "ABC" "Dog"中选出以A开头的名字,然后从中选 ...
- Java – Stream has already been operated upon or closed
Java – Stream has already been operated upon or closed package com.mkyong.java8; import java.util.Ar ...
- java stream collector
Java Stream API进阶篇 本文github地址 上一节介绍了部分Stream常见接口方法,理解起来并不困难,但Stream的用法不止于此,本节我们将仍然以Stream为例,介绍流的规约操作 ...
- Java Stream简介, 流的基本概念
在Javaor .net编程中, 我们经常见到"stream" 这个字眼. 我们大概知道这是个流的意思, 如果看完本文的话, 应该会有1个大概的概念. 一, Java中什么是St ...
- Java-Runoob:Java Stream、File、IO
ylbtech-Java-Runoob:Java Stream.File.IO 1.返回顶部 1. Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出 ...
- Java Stream函数式编程案例图文详解
导读 作者计划把Java Stream写成一个系列的文章,本文只是其中一节.更多内容期待您关注我的号! 一.什么是Java Stream? Java Stream函数式编程接口最初是在Java 8中引 ...
- Java Stream函数式编程图文详解(二):管道数据处理
一.Java Stream管道数据处理操作 在本号之前发布的文章<Java Stream函数式编程?用过都说好,案例图文详解送给你>中,笔者对Java Stream的介绍以及简单的使用方法 ...
- Java Stream函数式编程第三篇:管道流结果处理
一.Java Stream管道数据处理操作 在本号之前写过的文章中,曾经给大家介绍过 Java Stream管道流是用于简化集合类元素处理的java API.在使用的过程中分为三个阶段.在开始本文之前 ...
随机推荐
- HarmonyOS应用侧与前端页面数据通道建立
一. 应用侧调用前端页面函数 应用侧可以通过runJavaScript()方法调用前端页面的JavaScript相关函数.在下面的示例中,点击应用侧的"runJavaScript" ...
- HarmonyOS应用开发—资源分类与访问
应用开发过程中,经常需要用到颜色.字体.间距.图片等资源,在不同的设备或配置中,这些资源的值可能不同. ● 应用资源:借助资源文件能力,开发者在应用中自定义资源,自行管理这些资源在不同的设备或配置中 ...
- CentOS 8 安装更新国内清华大学源手记【亲测成功】
一直和各种OS打交道,仍觉得自己是小白,故深知小白们的困惑和蛋碎,特此将安装更新源的细节和步骤做了详细整理,供大家参考.红字是命令和提示,深灰色代码框中是源配置,本文采用了清华大学CentOS 8的源 ...
- InnoDB常用锁总结(行锁、间隙锁、临键锁、表锁)
相关文章 数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版) 数据库系列:高并发下的数据字段变更 数据库系列:覆盖索引和规避回表 数据库系列:数据库高可用及无损扩 ...
- el-row el-col 的点击事件@click 没反应
el-col 是vue封装的组件,不支持原生事件的触发.要想触发事件需要加修饰符".native" 无效果: <el-col :span="4" @cli ...
- 力扣602(MySQL)-好友申请Ⅱ:谁有最多的好友(中等)
题目: 在 Facebook 或者 Twitter 这样的社交应用中,人们经常会发好友申请也会收到其他人的好友申请. RequestAccepted 表: (requester_id, accepte ...
- 01_Vue技术-Hello案例分析
初始vue: 1.想让vue工作,就必须创建一个Vue实例,且要传入一个配置对象: 2.root容器里的代码依然符合html规范,只不过混入了一些特殊的vue语法: ...
- 菜鸟 CPaaS 平台微服务治理实践
简介: 在使用 MSE 的云产品之后,对 PaaS 平台层来说,避免很多重复功能的建设.在我们业务侧实际落地的远不止如上列举的场景,比如:服务优雅停机.注册中心等能力,均解决了业务侧的微服务治理上的难 ...
- EasyNLP开源|中文NLP+大模型落地,EasyNLP is all you need
简介:EasyNLP背后的技术框架如何设计?未来有哪些规划?今天一起来深入了解. 作者 | 临在.岑鸣.熊兮 来源 | 阿里开发者公众号 一 导读 随着BERT.Megatron.GPT-3等预训练 ...
- Hologres揭秘:优化COPY,批量导入性能提升5倍+
简介: 揭秘Hologres优化COPY的技术原理,实现批量导入性能提升5倍+ Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼 ...