JAVA8中list.stream()的一些简单使用
创始人
2024-03-26 03:47:29
0

stream的介绍

Stream 中文称为 “流”,通过将集合转换为这么一种叫做 “流” 的元素序列,通过声明性方式,能够对集合中的每个元素进行一系列并行或串行的流水线操作。这种代码更多地表达了业务逻辑的意图,而不是它的实现机制。易读的代码也易于维护、更可靠、更不容易出错。
stream是无存储的。stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。

为函数式编程而生。对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。
stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。
stream只能被使用一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。
Stream 就如同一个迭代器,单向,不可往复,数据只能遍历一次,遍历过一次后便失效了。

stream中的一些常用方法

stream中获取某个元素集合

 List list = preList.stream().map(Student::getUserId).distinct().collect(Collectors.toList());

当遇到字段为null时,需要进行特殊处理

List ages=studentList.stream().map(s -> s.getAge() == null ? "" : s.getAge()).collect(Collectors.toList());ages.removeAll(Collectors.singleton(""));

将List转换为用逗号隔开的字符串

String str = list.stream().map(String::valueOf).collect(Collectors.joining(","));
//计算计算List对象中某个字段值的总和:
int total = list.stream().mapToInt(User::getAge).sum();

filter(T -> boolean)根据某个属性值获取到该对象

保存boolean部分为true的数据
和list.removeIf()方法刚好相反,removelf中的test方法返回true代表会被过滤掉,而filter中代表会保留下来。

 List userIdList = preList.stream().filter(a -> id.equals(a.getId())).map(Student::getUserId).distinct().collect(Collectors.toList());

map(T -> R)将T映射为R

Map map = list.stream().collect(Collectors.toMap(Student::getId(), User::getName()));Map map = list.stream().collect(Collectors.toMap(Student::getId(), t -> t));

distinct(去重)

去掉重复元素,如果是实体类需要我们先在类中定义equals方法,否则无法正确处理。

limit(long n) 返回前n个元素

返回前2个元素

list = list.stream().limit(2).collect(toList());

skip(long n) 去掉前n个元素

去掉前两个元素

list = list.stream().skip(2).collect(toList());

flatMap(T -> Stream) 提取

将流中的每一个元素 T 映射为一个流,再把每一个流连接成为一个流(例如使用flatMap 提取 List map 提取年龄)

List ages = grades.stream().flatMap(grade -> grade.getStudents().stream()).map(Student::getAge).collect(Collectors.toList());

anyMatch(T -> boolean)

流中是否有一个元素匹配给定的 T -> boolean 条件
allMatch(T -> boolean)
流中是否所有元素都匹配给定的 T -> boolean 条件
noneMatch(T -> boolean)
流中是否没有元素匹配给定的 T -> boolean 条件
最终返回boolean类型

findAny() 和 findFirst() 查找元素

findAny():找到其中一个元素 (使用 stream() 时找到的是第一个元素;使用 parallelStream() 并行时找到的是其中一个元素)
findFirst():找到第一个元素

reduce((T, T) -> T) 和 reduce(T, (T, T) -> T)

第二种方法的第一个T是起始值

//求年龄总和
int sum = list.stream().map(Student::getAge).reduce(0, (a, b) -> a + b);
int sum = list.stream().map(Student::getAge).reduce(0, Integer::sum);
Optional sum = list.stream().map(Student::getAge).reduce(Integer::sum);//求年龄乘积
int sum = list.stream().map(Student::getAge).reduce(1, (a, b) -> a * b);

List根据字段分组

//根据id分组
Map> resultList = list.stream().collect(Collectors.groupingBy(Studednt::getId));

sorted() / sorted((T, T) -> int)

如果流中的元素的类实现了 Comparable 接口,即有自己的排序规则,那么可以直接调用 sorted() 方法对元素进行排序,如 Stream相反, 需要调用 sorted((T, T) -> int) 实现 Comparator 接口

list = list.stream().sorted((p1, p2) -> p1.getSum() - p2.getSum()).collect(toList());

相关内容

热门资讯

非洲民间故事流传下来的原因 非洲民间故事流传下来的原因 所周知,非洲是人类最古老的发祥地之一。古代非洲人民曾经以自己的勤劳与...
天下归元的书有哪几本? 天下归元的书有哪几本?除《扶摇皇后》外《帝凰》〖已出版〗(又名《沧海长歌》)   《扶摇皇后》〖已出...
仙剑奇侠传 95 98柔情 和... 仙剑奇侠传 95 98柔情 和新仙剑奇侠传 有什么区别啊……RT95和98 差不多 新版的 画面质...
杨贵妃秘史全集介绍 杨贵妃秘史全集介绍全集是多少集?要是什么网站才能在线观看?你可以去:策元网在线观看的网站
什么是螺丝的大径,中径和小径? 什么是螺丝的大径,中径和小径?大径:与外螺纹牙顶或内螺纹牙底相切的假想圆柱或圆锥的直径。中径:一个假...
有没有能体现人生哲理的短篇故事 有没有能体现人生哲理的短篇故事给楼主介绍伊索寓言 里面都是关于哲理的小故事 通过小故事告诉你一个哲理...
有没有好的变身小说?除了一些老... 有没有好的变身小说?除了一些老的之外类似于变身曲都市红颜笑那种的不是网游的《幻蝶之舞》起点网网游的《...
有本穿越小说是一个女杀手穿越到... 有本穿越小说是一个女杀手穿越到古代,男主角姓裴的,是个王爷谁知道这本小说名字的女主角在现代有一个姐姐...
喜马拉雅里有哪些虐心小说 喜马拉雅里有哪些虐心小说1、《妾心如宅第一卷》,作者:姵璃。 2、《三生三世枕上书》,作者:唐七公...
以前看过一部小说,女主是穿到了... 以前看过一部小说,女主是穿到了古代一位王妃的身上,男主是很腹黑,很妖孽,手段很高明的一个王爷这样情节...
谁能提供一些孔子 墨子 老子的... 谁能提供一些孔子 墨子 老子的名句谁能提供一些孔子 墨子 老子的名句写文章急用巧言令色 鲜矣仁 ...
06年的都市异能小说。 06年的都市异能小说。想看看老书,麻烦兄弟们盘点一下06年的都市异能小说。要有些YY的 尽量多些 谢...
您家的宝宝爱听故事吗我家宝宝1... 您家的宝宝爱听故事吗我家宝宝15个月了,从?几岁的宝宝 ?不要强加于宝宝做这做那,要引导宝宝喜欢上写...
有部韩剧儿子女儿离婚,小女儿被... 有部韩剧儿子女儿离婚,小女儿被未婚夫甩,是什么剧名?韩剧:结过一次了李在相执导由李铭廷 李相烨 吴代...
植物人怎样让妻子怀孕 植物人怎样让妻子怀孕胎教管家,你的私人孕育专家,ID:taijiaoguanjia老公植物人,老婆突...
安徒生童话丑小鸭人物特点 安徒生童话丑小鸭人物特点丑陋、勇敢、善良和诚实。在《安徒生童话》中,丑小鸭是七只小鸭中最丑陋、最矮小...
瑜伽的拉伸动作有哪些? 瑜伽的拉伸动作有哪些?   练习瑜珈时会影响身体、心灵,它能活络肌肉和神经系统,强壮韧带与肌腱,促使...
大熊猫绣球生了个女儿,熊猫生出... 大熊猫绣球生了个女儿,熊猫生出来的崽崽为何那么小?大熊猫绣球生了个女儿,熊猫生出来的崽崽很小的原因无...
寿司 寿司这是我非常喜欢的一道菜,现在把做法分享给大家,希望可以帮助到您。材料/工具大米:适量; 黄瓜: ...
求好看的枪战电影 最好是国内的 求好看的枪战电影 最好是国内的放逐,枪火,扫毒,毒战,风暴,纵横四海线人 证人 寒战 枪王之王 ...