Java中stream流的常见用法

news/2024/12/2 20:29:03/

Java中stream流的常见用法

这篇文章主要是记录stream流的用法,因为stream流比较常用,并且一些操作较复杂,记录在此,以后参考。

1、filter用法

主要是用来过滤集合中的元素,较常用。

        List<User> list = new ArrayList<>();list.add(new User(1, "小赵", "beijing"));list.add(new User(2, "小钱", "shanghai"));list.add(new User(3, "小孙", "tianjin"));list.add(new User(4, "小李", "nanjing"));list.add(new User(5, "小周", "shenzhen"));// 过滤出address=tianjin的List<User> list1 = list.stream().filter(item -> "tianjin".equals(item.getAddress())).collect(Collectors.toList());System.out.println(list1);

2、peek用法

主要是用来修改元素的状态,比如其中对象的字段等

        List<User> list = new ArrayList<>();list.add(new User(1, "小赵", "beijing"));list.add(new User(2, "小钱", "shanghai"));list.add(new User(3, "小孙", "tianjin"));list.add(new User(4, "小李", "nanjing"));list.add(new User(5, "小周", "shenzhen"));// peek操作主要用于修改集合中的元素// 修改元素中的address为guangzhouList<User> list2 = list.stream().peek(item -> item.setAddress("guangzhou")).collect(Collectors.toList());System.out.println(list2);

3、map用法

主要是用来替换集合中的元素

        List<User> list = new ArrayList<>();list.add(new User(1, "小赵", "beijing"));list.add(new User(2, "小钱", "shanghai"));list.add(new User(3, "小孙", "tianjin"));list.add(new User(4, "小李", "nanjing"));list.add(new User(5, "小周", "shenzhen"));// map操作主要是修改集合元素本身,也有一部分peek的功能// 将list的元素替换成元素的字段或者替换成其他的对象List<Integer> list3 = list.stream().map(User::getId).collect(Collectors.toList());System.out.println(list3);// map也可以用来peek的功能,比如下面例子,不过idea会提示用peek的List<User> list4 = list.stream().map(item -> {item.setAddress("beijing");return item;}).collect(Collectors.toList());System.out.println(list4);

4、flatmap用法

主要是将集合中的元素换成stream流

        List<String> list1 = Arrays.asList("a", "b");List<String> list2 = Arrays.asList("1", "2", "3");// flatmap主要是将集合中的元素换成stream流List<String> list3 = list1.stream().flatMap(item -> list2.stream().map(i -> item + i)).collect(Collectors.toList());// 将list1和list2中的元素拼接成list3// [a1, a2, a3, b1, b2, b3]System.out.println(list3);

5、list转map用法

这种场景是用于根据对象已知字段查找集合中对应元素

 		List<User> list = new ArrayList<>();list.add(new User(1, "小赵", "beijing"));list.add(new User(2, "小钱", "shanghai"));list.add(new User(3, "小孙", "tianjin"));list.add(new User(4, "小李", "nanjing"));list.add(new User(5, "小周", "shenzhen"));// 将list转成map// 一般这种场景是用于根据对象已知字段查找集合中对应元素// 这种一般用于key是唯一的,不然异常,或者用下一种Map<Integer, User> map = list.stream().collect(Collectors.toMap(User::getId, Function.identity()));Map<Integer, User> map1 = list.stream().collect(Collectors.toMap(User::getId, Function.identity(), (key1, key2) -> key2));

6、分组用法

这种一般用于按照元素的字段等条件进行分组

        List<User> list = new ArrayList<>();list.add(new User(1, "小赵", "beijing"));list.add(new User(2, "小钱", "shanghai"));list.add(new User(3, "小孙", "tianjin"));list.add(new User(4, "小李", "nanjing"));list.add(new User(5, "小周", "shenzhen"));Map<Integer, List<User>> map = list.stream().collect(Collectors.groupingBy(User::getId));

http://www.ppmy.cn/news/688158.html

相关文章

指纹芯片GF5216(汇顶)TEE方案移植(高通8996平台)

指纹移植步骤 指纹移植分为主要如下步骤&#xff1a; 1. 移植Kernel&#xff08;APPS&#xff09;的驱动&#xff1a;主要是创建设备/dev/goodix_fp文件与上电。&#xff08;对于TZ4.0及更高的版本&#xff0c; 不需要在APPS侧配置spi的clock&#xff09; 2. 移植NON-HLOS端T…

AP8851H DC/DC降压 恒压 LED驱动芯片

产品描述 特点 AP8851H 一款宽电压范围降压型 DC-DC 电源管理芯片&#xff0c;内部集成使能 开关控制、基准电源、误差放大器、过 热保护、限流保护、短路保护等功能&#xff0c; 非常适合在宽输入电压范围具有优良 的负载和线性调整度。 AP8851H 芯片包含每周期的峰值…

AP6256 固件

注&#xff1a;完整文件已上传到该平台&#xff0c;找不到的或有别的正基技术问题下方评论留言 #AP6256_NVRAM_V1.1_08252017 Cloned from bcm94345wlpagb_p2xx.txt NVRAMRev$Rev: 498373 $ sromrev11 vendid0x14e4 devid0x43ab manfid0x2d0 prodid0x06e4 macaddr00:90:4c:c5…

堃博医疗创上市以来新低:年内跌幅超八成,市值累计蒸发90亿港元

撰稿|汤汤 来源|贝多财经 近日&#xff0c;港交所上市公司堃博医疗-B&#xff08;HK:02216&#xff0c;下称“堃博医疗”&#xff09;、三叶草生物-B&#xff08;HK:02197&#xff0c;下称“三叶草生物”&#xff09;的股价双双再创新低。其中&#xff0c;堃博医疗的股价于20…

Scala面向对象【下】

1、特质 Scala 语言中&#xff0c;采用特质 trait&#xff08;特征&#xff09;来代替接口的概念&#xff0c;也就是说&#xff0c;多个类具有相同的特质&#xff08;特征&#xff09;时&#xff0c;就可以将这个特质&#xff08;特征&#xff09;独立出来&#xff0c;采用关键…

【分布式存储】聊聊共识和一致性

在分布式存储系统中&#xff0c;对于提高性能、可用性、可拓展性来说都有相关机制可以保证&#xff0c;比如复制、切片等&#xff0c;但是一旦涉及到分布式系统中选主的问题&#xff0c;就比较难&#xff0c;因为网络是不可靠的&#xff0c;并且可能还有拜占庭将军问题。所以如…

MS5182N(AD7682)驱动开发调试总结(一)

简介 MS5182N芯片是瑞盟科技的一款4通道的16位SAR ADC芯片,其对标的是ADI的AD7682芯片&#xff0c;或者说基本上两者功能一样,可以作为国产替代。另外其MS5189(8通道的)对标的则是AD7689。我此次项目中仅使用了MS5182N 。不过还是吐槽一下,其数据手册做的真是无语,虽然明显有直…

STM32与多台MS5803压力传感器I2C通讯

MS5803压力传感器支持SPI和I2C总线通讯&#xff0c;拥有24位AD转换。能够同时获得压力值和温度值&#xff0c;其中压力测量范围为10-1100mbar&#xff0c;温度的测量范围是-40-85摄氏度。各引脚功能及参数如下&#xff1a; 传感器内部结构图如下&#xff1a; 通讯协议的选择通过…