JAVA8内置的函数式编程接口应用场景和方式

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

https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247485508&idx=2&sn=a686a128ccbcfa1fcc000d8b9de14155&chksm=ebd74945dca0c05378c3083c6efda294ea11db25705436d08a6d6af4e82993cac99804ee1553&scene=0&xtrack=1&key=e5cd714fdda6b3aa961c90d5ceabf9b7d0f94dc88c73660c8794d57ea39a0ca44d0d09c268b6f61f951cf93c4ea327cb78a38248b4af27654602be675c377cd64ed280e4bc1b7438d2e4ddc57d559009&ascene=1&uin=ODEzMzE3OTc%3D&devicetype=Windows+10&version=62060833&lang=zh_CN&pass_ticket=fhXegoayg6%2BVSA6CJfCpSIPnWPJWR0l8dZnuI2R7r4U%3D

Java8 Stream 流使用场景和常用操作的更多相关文章

  1. 【转】Java8 Stream 流详解

      当我第一次阅读 Java8 中的 Stream API 时,说实话,我非常困惑,因为它的名字听起来与 Java I0 框架中的 InputStream 和 OutputStream 非常类似.但是 ...

  2. Java8 Stream流

    第三章 Stream流 <Java8 Stream编码实战>的代码全部在https://github.com/yu-linfeng/BlogRepositories/tree/master ...

  3. Java8 Stream流API常用操作

    Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...

  4. 【JDK8】Java8 Stream流API常用操作

    Java版本现在已经发布到JDK13了,目前公司还是用的JDK8,还是有必要了解一些JDK8的新特性的,例如优雅判空的Optional类,操作集合的Stream流,函数式编程等等;这里就按操作例举一些 ...

  5. Java8——Stream流式操作的一点小总结

    我发现,自从我学了Stream流式操作之后,工作中使用到的频率还是挺高的,因为stream配合着lambda表达式或者双冒号(::)使用真的是优雅到了极致!今天就简单分(搬)享(运)一下我对strea ...

  6. Java8——Stream流

    Stream是数据渠道,用于操作集合.数组等生成的元素序列. Stream操作的三个步骤: 创建Stream 中间操作 终止操作 一.获取stream的四种方式 通过collection系列集合的st ...

  7. 关于Java8 Stream流的利与弊 Java初学者,大神勿喷

    题目需求: 1:第一个队伍只要名字为3个字成员的姓名,存储到新集合 2:第一个队伍筛选之后只要前3人:存储到一个新集合 3:第2个队伍只要姓张的成员姓名:存储到一个新集合 4:第2个队伍不要前2人,存 ...

  8. java8 stream流操作的flatMap(流的扁平化)

    https://mp.weixin.qq.com/s/7Fqb6tAucrl8UmyiY78AXg https://blog.csdn.net/Mark_Chao/article/details/80 ...

  9. Java8 - Stream流:让你的集合变得更简单!

    前段时间,在公司熟悉新代码,发现好多都是新代码,全是 Java8语法,之前没有了解过,一直在专研技术的深度,却忘了最初的语法,所以,今天总结下Stream ,算是一份自己理解,不会很深入,就讲讲常用的 ...

随机推荐

  1. Word2016经常复制公式卡死无响应如何解决?

    Word文件 > 选项 > 高级 > 显示 > 禁用“硬件图形加速”

  2. QT/C++ 类型转换

    "轻轻地我走了,正如我轻轻地来,我挥一挥衣袖,不带走一片云彩"------阿魔 1) int转为QString: QString::number(int) 2) std::stri ...

  3. 小白都能看懂的vue中各种通信传值方式,附带详细代码

    1.路由通信传值 路由通信是通过路由跳转用query把参数带过去,也是vue常用的通信手段. 例子: 创建并在路由注册一个组件Head <template> <div id=&quo ...

  4. 系统中提示未找到/usr/bin/ld: cannot find -lxxx错误的通用解决方法

    在linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息: 代码如下: /usr/bin/ld: cannot find -lxxx 这些讯息会随着编译不同类型的sour ...

  5. win10 远程连接怎么设置快捷方式

    在桌面空白处右键,选择新建快捷方式,然后输入命令:C:\windows\system32\mstsc.exe,点击下一步,然后输入快捷方式名称:远程连接,点击确定即可.

  6. 如何访问Pod

    本章看点: 理清Deployment,ReplicaSet和Pod的关系,以及三者之间的网络关系,ip地址和端口号 通过Pod进入docker容器修改里面的内容 外部网络访问Pod里面的应用 一.通过 ...

  7. 【Java拾遗】Java transient关键字

    1. transient的作用及使用方法 2. transient使用小结 3. transient使用细节--被transient关键字修饰的变量真的不能被序列化吗? 1. transient的作用 ...

  8. 12.1 Mapping手动创建

    只能在index里的field不存在的时候,才能指定新field的数据类型,field有数据后,就不能再修改field的类型了 可创建的类型如下: integer double date text/s ...

  9. console.log()、console.info()、console.debug()的区别

    onsole.log().console.info().console.debug()的作用都是在浏览器控制台打印信息的. 使用最多的是console.log().console.info()和con ...

  10. RestFramework之序列化器源码解析

    一.源码解析之序列化: 1.当视图类进行实例化序列化类做了如下操作: #ModelSerializer继承Serializer再继承BaseSerializer(此类定义实例化方法) #在BaseSe ...