目录

  • 前言
  • 判断是否存在满足条件的数据
  • 抽取数据,构造List
  • 抽取数据,构造Map
  • 赋值
  • 统计相加
  • 过滤
  • 去重
  • 分页/截取

前言

这里介绍stream流对集合进行处理的一些常规写法。
这里的集合是对象集合,比例:List、List等。
这里用User作为演示,有以下属性

 /*** 序号*/private Integer index;/*** 用户ID*/private Long userId;/*** 用户名*/private String userName;/*** 部门*/private String department;/*** 部门ID*/private Long departmentId;/*** 区号*/private Long areaCode;/*** 账户余额*/private BigDecimal money;

判断是否存在满足条件的数据

例:判断List中,有没有名字叫jack且不在hz的用户

boolean b = userList.stream().anyMatch(e -> "jack".equals(e.getUsername()) && !"hz".equals(e.getAddress()));

抽取数据,构造List

例:抽取出List中的userId

List<Long> codeList = userList.stream().map(User::getUserId).collect(Collectors.toList());

抽取数据,构造Map

//例:抽取出 用户ID和用户名
Map<Long, String> userMap = userList.stream().collect(Collectors.toMap(User::getUserId, User::getUserName));//例:以address为key,以实体类为value. 注意:key也就是address不可以有重复的值
Map<String, User> userMap1 = userList.stream().collect(Collectors.toMap(User::getAddress, info -> info));//例:抽取出money小于25的用户ID和用户名
Map<Long, String> userMap2 = userList.stream().filter(c -> c.getMoney().compareTo(new BigDecimal("25")) < 0).collect(Collectors.toMap(User::getUserId, User::getUserName));//例:根据AreaCode进行分组
Map<Long, List<User>> userMap3 = userList.stream().collect(Collectors.groupingBy(User::getAreaCode));

赋值

例:给List中的userName赋固定值

userList.stream().forEach(item -> item.setUserName("jack"));

例:给List中的index递增赋值,1,2,3…

Integer[] arr = {1};
userList.stream().peek(e -> e.setIndex(arr[0]++)).collect(Collectors.toList());

例:给List中的department、departmentId同时赋值

userList.stream().forEach(userData -> {userData.setDepartment("研发部");userData.setDepartmentId(10086L);
});

统计相加

例:把List中每个用户的money相加求和

BigDecimal totalMoney = userList.stream().map(User::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);

过滤

例:取出List中money小于25的用户

List<User> userList2 = userList.stream().filter(item -> item.getMoney().compareTo(new BigDecimal("25")) < 0).collect(Collectors.toList());

例:取出List中userName=jack的用户,且只要一个jack

Optional<User> result = userList.stream().filter(item -> "jack".equals(item.getUsername())).collect(Collectors.toList()).stream().findFirst();
if(result.isPresent()){//查询结果非空User user = result.get();//do something......
}

例:取出List中,名字叫jack或者tom的用户

 List<User> collect = userList.stream().filter(item -> Arrays.asList("jack", "tom").contains(item.getUsername())).collect(Collectors.toList());

去重

例:根据userId,进行去重

List<User> userList3 = userList.stream().filter(distinctByKey(b -> b.getUserId())).collect(Collectors.toList());private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {Map<Object, Boolean> seen = new ConcurrentHashMap<>();return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}

分页/截取

int pageStart = 1;
int pageSize = 10;
List<User> userListPage = userList.stream().skip(pageStart).limit(pageSize).collect(Collectors.toList());

stream流处理List相关推荐

  1. stream流对象的理解及使用

    我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...

  2. Cuda Stream流 分析

    Cuda Stream流分析 Stream 一般来说,cuda c并行性表现在下面两个层面上: • Kernel level • Grid level Stream和event简介 Cuda stre ...

  3. CUDA 7 Stream流简化并发性

    CUDA 7 Stream流简化并发性 异构计算是指高效地使用系统中的所有处理器,包括 CPU 和 GPU .为此,应用程序必须在多个处理器上并发执行函数. CUDA 应用程序通过在 streams ...

  4. Java8中Stream流对集合操作

    java8中Stream流引入函数式编程思想,主要配合各种接口.lambda表达式.方法引用等方式,为集合的遍历.过滤.映射等提供非常"优雅"的操作方式. Student.java ...

  5. Java8 Stream流递归,几行代码搞定遍历树形结构

    欢迎关注方志朋的博客,回复"666"获面试宝典 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中 ...

  6. 【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?

    写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...

  7. 10.Stream流

    一.Stream流 1.案例实现 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张" ...

  8. JDK8新特性之Stream流

    是什么是Stream流 java.util.stream.Stream Stream流和传统的IO流,它们都叫流,却是两个完全不一样的概念和东西. 流可以简单的说是处理数据集合的东西,可以申明式流式A ...

  9. list转map stream_advancedday10可变参数不可变集合及Stream流

    可变参数 可变参数指的是,方法参数的个数可以发生改变.但是其本质是一个数组,在方法把可变参数当做数组来使用就可以了. //可变参数的格式:数据类型...参数名public static void 方法 ...

  10. Java 8 - Stream流骚操作解读2_归约操作

    文章目录 Pre 什么是归约操作 元素求和 reduce reduce如何运行的 最大值和最小值 Pre Java 8 - Stream流骚操作解读见到过的终端操作都是返回一个 boolean ( a ...

最新文章

  1. golang 库 go-restful 中 https basic authentication 基础认证实例
  2. hdu5126stars
  3. 小米笔记本服务器系统,小米笔记本Pro GTX版
  4. 捋一捋js面向对象的继承问题
  5. 计算机课中排序选什么,《计算机应用基础课件》1.6 排序复习课程.ppt
  6. everything下载哪个版本_Everything敏感信息泄露
  7. 双11秒查包裹,菜鸟携快递公司推出云客服功能
  8. 智能变电站调试仿真培训系统 61850规约培训系统 免费送
  9. 对RS232接口的详细攻破
  10. 解决python运行selenium程序执行完后,Chrome浏览器自动关闭的问题
  11. 同时虚拟多个3D桌面
  12. 为什么说程序员做外包没前途?
  13. 【题解】【AcWing】3505. 最长ZigZag子序列
  14. 现代软件工程讲义 7 设计阶段 Spec
  15. 多功能Python键盘记录工具Radium
  16. 关联性——相关性分析
  17. 杀戮空间2服务器协议,杀戮空间2 云服务器搭建
  18. 如何查看.net core 最新版本的功能
  19. Ndis网卡驱动是如何操控硬件的
  20. Windows搭建nexus3.xx

热门文章

  1. 我们会被低代码取代吗?
  2. Oracle8i与MS SQL SERVER2000之比较
  3. php imagick 安装,win10_php_imagick 扩展的安装
  4. KBengine 引擎
  5. 解决U盘在mac air下格式化后在windows上无法显示
  6. elementUI 动态渲染三级菜单
  7. Python第二章课后总结
  8. 2016.04.03,英语,《Vocabulary Builder》Unit 09
  9. 通用的后台菜单、权限、用户、分组管理系统
  10. openfire--好友管理实现好友添加及分组管理