1. 对list对象做特殊处理,改变原list的属性方式一
        List<Boy> list = new ArrayList<>();list.add(Boy.builder().name("a").gender(0).age(10).build());list.add(Boy.builder().name("b").gender(1).age(10).build());list.add(Boy.builder().name("b").gender(0).age(10).build());list.add(Boy.builder().name("d").gender(1).age(10).build());list.stream().forEach(s -> System.out.println(s));list.stream().peek( x -> {if (x.getGender() == 0) {x.setAge(x.getAge() + 5);}}).collect(Collectors.toList());list.stream().forEach(s -> System.out.println(s));

2.对list对象做特殊处理,改变原list的属性方式二

        List<Boy> list = new ArrayList<>();list.add(Boy.builder().name("a").gender(0).age(10).build());list.add(Boy.builder().name("b").gender(1).age(10).build());list.add(Boy.builder().name("b").gender(0).age(10).build());list.add(Boy.builder().name("d").gender(1).age(10).build());list.stream().forEach(s -> System.out.println(s));List<Boy> collect = list.stream().map(x -> {if (x.getGender() == 0) {x.setAge(x.getAge() + 5);}return x;}).collect(Collectors.toList());list.stream().forEach(s -> System.out.println(s));

3.收集对象某一属性为数组

        List<Boy> list = new ArrayList<>();list.add(Boy.builder().name("a").gender(0).age(10).build());list.add(Boy.builder().name("b").gender(1).age(10).build());list.add(Boy.builder().name("b").gender(0).age(10).build());list.add(Boy.builder().name("d").gender(1).age(10).build());list.stream().forEach(s -> System.out.println(s));List<String> collectName = list.stream().map(Boy::getName).collect(Collectors.toList());// 去重加上distinct()List<Integer> collectGender = list.stream().map(Boy::getGender).distinct().collect(Collectors.toList());collectName.stream().forEach(s -> System.out.println(s));collectGender.stream().forEach(s -> System.out.println(s));

4.分组计数

        List<Boy> list = new ArrayList<>();list.add(Boy.builder().name("a").gender(0).age(15).build());list.add(Boy.builder().name("b").gender(1).age(15).build());list.add(Boy.builder().name("b").gender(0).age(10).build());list.add(Boy.builder().name("d").gender(1).age(10).build());list.stream().forEach(s -> System.out.println(s));//统计每个性别下,每个年龄的个数Map<Integer, Map<Integer, Long>> collect = list.stream().collect(Collectors.groupingBy(Boy::getGender, Collectors.groupingBy(Boy::getAge, Collectors.counting())));System.out.println(collect);

5.分组求和bigdecimal

        List<Boy> list = new ArrayList<>();list.add(Boy.builder().name("a").gender(0).age(15).depId(1).salary(BigDecimal.valueOf(12.00)).build());list.add(Boy.builder().name("b").gender(0).age(15).depId(2).salary(BigDecimal.valueOf(15.00)).build());list.add(Boy.builder().name("c").gender(0).age(15).depId(3).salary(BigDecimal.valueOf(16.00)).build());list.add(Boy.builder().name("d").gender(0).age(15).depId(1).salary(BigDecimal.valueOf(17.00)).build());list.add(Boy.builder().name("e").gender(0).age(15).depId(2).salary(BigDecimal.valueOf(18.00)).build());//统计部门的工资之和Map<Integer,BigDecimal> collect = list.stream().collect(Collectors.groupingBy(Boy::getDepId,Collectors.reducing(BigDecimal.ZERO, Boy::getSalary, BigDecimal::add)));System.out.println(collect);
  1. 根据对象中的属性转换成map
        List<Boy> list = new ArrayList<>();list.add(Boy.builder().name("a").gender(0).age(15).depId(1).salary(BigDecimal.valueOf(12.00)).build());list.add(Boy.builder().name("b").gender(0).age(15).depId(2).salary(BigDecimal.valueOf(15.00)).build());list.add(Boy.builder().name("c").gender(0).age(15).depId(3).salary(BigDecimal.valueOf(16.00)).build());list.add(Boy.builder().name("d").gender(0).age(15).depId(1).salary(BigDecimal.valueOf(17.00)).build());list.add(Boy.builder().name("e").gender(0).age(15).depId(2).salary(BigDecimal.valueOf(18.00)).build());// 根据姓名转化成mapMap<String, Boy> collect = list.stream().collect(Collectors.toMap(Boy::getName, Boy -> Boy));System.out.println(collect);
  1. 两个list根据共同属性,设置某个对象的值
        List<Boy> list = new ArrayList<>();list.add(Boy.builder().name("a").gender(0).age(15).depId(1).salary(BigDecimal.valueOf(12.00)).build());list.add(Boy.builder().name("b").gender(0).age(15).depId(2).salary(BigDecimal.valueOf(15.00)).build());list.add(Boy.builder().name("c").gender(0).age(15).depId(3).salary(BigDecimal.valueOf(16.00)).build());list.add(Boy.builder().name("d").gender(0).age(15).depId(1).salary(BigDecimal.valueOf(17.00)).build());list.add(Boy.builder().name("e").gender(0).age(15).depId(2).salary(BigDecimal.valueOf(18.00)).build());// 根据部门id把设置boy的部门名称List<Dep> depList = new ArrayList<>();depList.add(Dep.builder().depId(1).depName("部门一").build());depList.add(Dep.builder().depId(2).depName("部门二").build());depList.add(Dep.builder().depId(3).depName("部门三").build());List<Boy> collect = list.stream().peek(x -> depList.stream().filter(y -> Objects.equals(y.getDepId(), x.getDepId())).forEach(z -> x.setDepName(z.getDepName()))).collect(Collectors.toList());System.out.println(collect);
  1. stream流工具类

import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;/*** @author tanjunjun* @date 2021/11/27 8:58* @description  list stream流处理*/
public class ListStreamUtils {/***  lambda表达式对两个List进行循环,根据符合条件,进行相关的赋值操作并返回这个对象集合* @param sourceList   待设置源列表* @param srcEqualProp   源对象条件判断属性名* @param srcSetProp     源对象待设置属性名* @param targetList     资源提供者列表* @param tarEqualProp   对象条件判断参数名* @param tarGetProp     待获取对象属性名* @param <T>* @param <U>* @return*/public static <T,U>List<T> setListByEqualObjProperty(List<T> sourceList, String srcEqualProp, String srcSetProp,List<U> targetList, String tarEqualProp, String tarGetProp){List<T> resultList = sourceList.stream().map(sur-> targetList.stream().filter(tar -> Objects.equals(getValueByPropName(sur, srcEqualProp), getValueByPropName(tar, tarEqualProp))).findFirst().map(tar -> {setValueByPropName(sur, srcSetProp, getValueByPropName(tar, tarGetProp));return sur;} ).orElse(null)).collect(Collectors.toList());return  resultList;}/***  通过遍历两个List中按id属性相等的归结到resultList中* @param oneList  源list 1* @param twoList  源list 2* @param equalKeyName 相等的map键值*/public static List<Map<Object, Object>> compareListHitData(List<Map<Object, Object>> oneList, List<Map<Object, Object>> twoList, Object equalKeyName) {List<Map<Object, Object>> resultList = oneList.stream().map(map -> twoList.stream().filter(m -> Objects.equals(m.get(equalKeyName),map.get(equalKeyName))).findFirst().map(m -> {map.putAll(m);return map;}).orElse(null)).filter(Objects::nonNull).collect(Collectors.toList());return resultList;}// 通过属性获取传入对象的指定属性的值public static <T> T getValueByPropName(Object object, String propName) {T value = null;try {// 通过属性获取对象的属性Field field = object.getClass().getDeclaredField(propName);// 对象的属性的访问权限设置为可访问field.setAccessible(true);// 获取属性的对应的值value = (T)field.get(object);} catch (Exception e) {return null;}return value;}// 通过属性设置传入对象的指定属性的值public static <U> void setValueByPropName(Object object, String propName, U updateValue) {try {// 通过属性获取对象的属性Field field = object.getClass().getDeclaredField(propName);// 对象的属性的访问权限设置为可访问field.setAccessible(true);// 设置属性的对应的值field.set(object, updateValue);} catch (Exception e) {}}}

JavaStream流处理数据的几种方式相关推荐

  1. 字符流写数据的5种方式

    方法介绍 方法名 说明 void write(int c) 写一个字符 void write(char[] cbuf) 写入一个字符数组 void write(char[] cbuf, int off ...

  2. 字符流读数据的2种方式

    方法介绍 方法名 说明 int read() 一次读一个字符数据 int read(char[] cbuf) 一次读一个字符数组数据 代码演示 public class InputStreamRead ...

  3. 【Java基础】IO流概述分类、字节流写数据、字节流写数据的三种方式及写数据的两个小问题

    目录 一.IO流概述和分类 二.字节流写数据 三.字节流写数据的三种方式 四.字节流写数据的两个小问题 一.IO流概述和分类 IO流介绍: ● IO:输入/输出(Input/Output) ● 流:是 ...

  4. Servlet获取Excel中数据的两种方式

    Servlet解析Excel文件的两种方式 简单分享一下Servlet通过解析Excel文件得到其中数据的两种方式 第一种:前端获取 思路:通过layui的第三方插件 layui.excel 解析ex ...

  5. Spark读取Hive数据的两种方式与保存数据到HDFS

    Spark读取Hive数据的两种方式与保存数据到HDFS Spark读取Hive数据的方式主要有两种 1. 通过访问hive metastore的方式,这种方式通过访问hive的metastore元数 ...

  6. Android数据存储几种方式用法总结

    Android数据存储几种方式用法总结 1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存 ...

  7. discard connection丢失数据_python kafka 生产者发送数据的三种方式

    python kafka 生产者发送数据的三种方式 发送方式 同步发送 发送数据耗时最长 有发送数据的状态,不会丢失数据,数据可靠性高 以同步的方式发送消息时,一条一条的发送,对每条消息返回的结果判断 ...

  8. 向服务器端提交数据的两种方式

    朴素版:                                                                                                 ...

  9. es重建字段类型_关于elasticsearch中更新数据的几种方式

    作为一个成熟的框架,Elasticsearch里面提供了丰富的操作数据的api,本篇我们就来学习一下在es中更新数据的几种方式. (一)更新文档 (1)部分更新: java api: ` HashMa ...

最新文章

  1. 梅尔频率倒谱系数(MFCC)资源
  2. faiss简介及示例
  3. 微软私有云分享(R2)5-域升级造成Hyper-V主机无法实时迁移
  4. 高手问答精选:Go 语言 —— 云计算时代的 C 语言
  5. django-auth组件
  6. oracle学习一二
  7. 【Mybatis-Plus】(一)初识Mybatis-Plus 入门案例
  8. Lackey:一个示例工具
  9. 剑指offer(7)斐波那契数列
  10. 网络不稳定的原因_关键词排名波动原因,如何解决网站排名不稳定!
  11. 漫画:什么是希尔排序?
  12. py 操作Mysql数据库
  13. [Halcon识别] 二维码识别
  14. 2021春招美团算法笔试题
  15. excel同一单元格怎么换行_自动换行还是强制换行?还有一键批量换行等着你
  16. excel打不开_卸载WPS以后为什么无法打开一个新建的Excel工作簿了
  17. 将APP变成黑白的颜色
  18. opop如何和计算机链接,oppo如何连接电脑
  19. ora-3136故障处理
  20. esp8266保存html文件,八,ESP8266 文件保存数据

热门文章

  1. DJL初学者学习笔记(一):Java启动DJL控制台打印No matching cuda flavor for win found: cu65并且在线下载dll文件解决方案
  2. 关于使用listFile()遍历文件夹报空指针异常的问题
  3. Python + Tweepy 实现Twitter信息抓取(1)——准备阶段
  4. CAD怎么转换版本?两个办法解决
  5. 华为HMS Core全面发布,全球开发者的新机会来了!
  6. e3是合法浮点数吗_下面四个选项中,均是不合法的浮点数的选项是
  7. 算法题 牌型判断 Java
  8. 基因表达分析(上)- 差异表达分析
  9. Word中英文导致空格间距过大如何解决?
  10. Flink 任务报错:flink FileNotFoundException: JAR file does not exist: -yn