Java8 Stream 流使用场景和常用操作
pojo类对象和默认创建list的方法
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; import java.util.ArrayList;
import java.util.List; @Data
@AllArgsConstructor
@NoArgsConstructor
public class DotaHero { private String name;
private String kind;
private String sex; /**
* 返回一个不同元素的数组
* @return
*/
public static List<DotaHero> bulidDiffObjectList(){
List<DotaHero> list = new ArrayList<>();
list.add(new DotaHero("影魔", "敏捷", "男"));
list.add(new DotaHero("小黑", "敏捷", "女"));
list.add(new DotaHero("马尔斯", "力量", "男")); return list;
}
}
测试类初始化一个List:
public class StreamTest { private List<DotaHero> dotaHeroes; @Before
public void init(){
dotaHeroes = DotaHero.bulidDiffObjectList();
}
将根据list转换为该list对象中的一个属性映射该对象,name属性唯一的情况
@Test
public void list2MapValueObject(){
Map<String, DotaHero> nameMapDotaHero = dotaHeroes.stream().collect(Collectors.toMap(DotaHero::getName, d -> d));
nameMapDotaHero.forEach((k,v) -> System.out.format("key=%s, value=%s\n", k, v));
}
将根据list转换为该list对象中的一个属性映射该对象,kind属性不唯一的情况,Collectors.toMap 对于重复的key会抛出IllegalStateException异常
当key值不唯一时,通过Collectors.groupingBy将list转换成key映射list对象的格式:
/**
* 将根据list转换为该list对象中的一个属性映射该对象
* kind属性不唯一的情况
*/
@Test
public void list2MapValueList(){
/*
Collectors.toMap 对于重复的key会抛出IllegalStateException异常
Map<String, DotaHero> nameMapDotaHero = dotaHeroes.stream().collect(Collectors.toMap(DotaHero::getKind, d -> d));
nameMapDotaHero.forEach((k,v) -> System.out.format("key=%s, value=%s\n", k, v));
*/
// 当key值不唯一时,通过Collectors.groupingBy将list转换成key映射list对象的格式
Map<String, List<DotaHero>> nameMapDotaHeroList = dotaHeroes.stream().collect(Collectors.groupingBy(DotaHero::getKind));
nameMapDotaHeroList.forEach((k,v) -> System.out.format("key=%s, value=%s\n", k, v));
}
TODO 待写
flatMap
reduce
来源:
https://juejin.im/post/5cc124a95188252d891d00f2
Java8 Stream 流使用场景和常用操作的更多相关文章
- 【转】Java8 Stream 流详解
当我第一次阅读 Java8 中的 Stream API 时,说实话,我非常困惑,因为它的名字听起来与 Java I0 框架中的 InputStream 和 OutputStream 非常类似.但是 ...
- Java8 Stream流
第三章 Stream流 <Java8 Stream编码实战>的代码全部在https://github.com/yu-linfeng/BlogRepositories/tree/master ...
- Java8 Stream流API常用操作
Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...
- 【JDK8】Java8 Stream流API常用操作
Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...
- Java8——Stream流式操作的一点小总结
我发现,自从我学了Stream流式操作之后,工作中使用到的频率还是挺高的,因为stream配合着lambda表达式或者双冒号(::)使用真的是优雅到了极致!今天就简单分(搬)享(运)一下我对strea ...
- Java8——Stream流
Stream是数据渠道,用于操作集合.数组等生成的元素序列. Stream操作的三个步骤: 创建Stream 中间操作 终止操作 一.获取stream的四种方式 通过collection系列集合的st ...
- 关于Java8 Stream流的利与弊 Java初学者,大神勿喷
题目需求: 1:第一个队伍只要名字为3个字成员的姓名,存储到新集合 2:第一个队伍筛选之后只要前3人:存储到一个新集合 3:第2个队伍只要姓张的成员姓名:存储到一个新集合 4:第2个队伍不要前2人,存 ...
- java8 stream流操作的flatMap(流的扁平化)
https://mp.weixin.qq.com/s/7Fqb6tAucrl8UmyiY78AXg https://blog.csdn.net/Mark_Chao/article/details/80 ...
- Java8 - Stream流:让你的集合变得更简单!
前段时间,在公司熟悉新代码,发现好多都是新代码,全是 Java8语法,之前没有了解过,一直在专研技术的深度,却忘了最初的语法,所以,今天总结下Stream ,算是一份自己理解,不会很深入,就讲讲常用的 ...
随机推荐
- Word2016经常复制公式卡死无响应如何解决?
Word文件 > 选项 > 高级 > 显示 > 禁用“硬件图形加速”
- QT/C++ 类型转换
"轻轻地我走了,正如我轻轻地来,我挥一挥衣袖,不带走一片云彩"------阿魔 1) int转为QString: QString::number(int) 2) std::stri ...
- 小白都能看懂的vue中各种通信传值方式,附带详细代码
1.路由通信传值 路由通信是通过路由跳转用query把参数带过去,也是vue常用的通信手段. 例子: 创建并在路由注册一个组件Head <template> <div id=&quo ...
- 系统中提示未找到/usr/bin/ld: cannot find -lxxx错误的通用解决方法
在linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息: 代码如下: /usr/bin/ld: cannot find -lxxx 这些讯息会随着编译不同类型的sour ...
- win10 远程连接怎么设置快捷方式
在桌面空白处右键,选择新建快捷方式,然后输入命令:C:\windows\system32\mstsc.exe,点击下一步,然后输入快捷方式名称:远程连接,点击确定即可.
- 如何访问Pod
本章看点: 理清Deployment,ReplicaSet和Pod的关系,以及三者之间的网络关系,ip地址和端口号 通过Pod进入docker容器修改里面的内容 外部网络访问Pod里面的应用 一.通过 ...
- 【Java拾遗】Java transient关键字
1. transient的作用及使用方法 2. transient使用小结 3. transient使用细节--被transient关键字修饰的变量真的不能被序列化吗? 1. transient的作用 ...
- 12.1 Mapping手动创建
只能在index里的field不存在的时候,才能指定新field的数据类型,field有数据后,就不能再修改field的类型了 可创建的类型如下: integer double date text/s ...
- console.log()、console.info()、console.debug()的区别
onsole.log().console.info().console.debug()的作用都是在浏览器控制台打印信息的. 使用最多的是console.log().console.info()和con ...
- RestFramework之序列化器源码解析
一.源码解析之序列化: 1.当视图类进行实例化序列化类做了如下操作: #ModelSerializer继承Serializer再继承BaseSerializer(此类定义实例化方法) #在BaseSe ...