stream流处理List
目录
- 前言
- 判断是否存在满足条件的数据
- 抽取数据,构造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相关推荐
- stream流对象的理解及使用
我的理解:用stream流式处理数据,将数据用一个一个方法去 . (点,即调用) 得到新的数据结果,可以一步达成. 有多种方式生成 Stream Source: 从 Collection 和数组 Co ...
- Cuda Stream流 分析
Cuda Stream流分析 Stream 一般来说,cuda c并行性表现在下面两个层面上: • Kernel level • Grid level Stream和event简介 Cuda stre ...
- CUDA 7 Stream流简化并发性
CUDA 7 Stream流简化并发性 异构计算是指高效地使用系统中的所有处理器,包括 CPU 和 GPU .为此,应用程序必须在多个处理器上并发执行函数. CUDA 应用程序通过在 streams ...
- Java8中Stream流对集合操作
java8中Stream流引入函数式编程思想,主要配合各种接口.lambda表达式.方法引用等方式,为集合的遍历.过滤.映射等提供非常"优雅"的操作方式. Student.java ...
- Java8 Stream流递归,几行代码搞定遍历树形结构
欢迎关注方志朋的博客,回复"666"获面试宝典 可能平常会遇到一些需求,比如构建菜单,构建树形结构,数据库一般就使用父id来表示,为了降低数据库的查询压力,我们可以使用Java8中 ...
- 【Java8新特性】面试官问我:Java8中创建Stream流有哪几种方式?
写在前面 先说点题外话:不少读者工作几年后,仍然在使用Java7之前版本的方法,对于Java8版本的新特性,甚至是Java7的新特性几乎没有接触过.真心想对这些读者说:你真的需要了解下Java8甚至以 ...
- 10.Stream流
一.Stream流 1.案例实现 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张" ...
- JDK8新特性之Stream流
是什么是Stream流 java.util.stream.Stream Stream流和传统的IO流,它们都叫流,却是两个完全不一样的概念和东西. 流可以简单的说是处理数据集合的东西,可以申明式流式A ...
- list转map stream_advancedday10可变参数不可变集合及Stream流
可变参数 可变参数指的是,方法参数的个数可以发生改变.但是其本质是一个数组,在方法把可变参数当做数组来使用就可以了. //可变参数的格式:数据类型...参数名public static void 方法 ...
- Java 8 - Stream流骚操作解读2_归约操作
文章目录 Pre 什么是归约操作 元素求和 reduce reduce如何运行的 最大值和最小值 Pre Java 8 - Stream流骚操作解读见到过的终端操作都是返回一个 boolean ( a ...
最新文章
- golang 库 go-restful 中 https basic authentication 基础认证实例
- hdu5126stars
- 小米笔记本服务器系统,小米笔记本Pro GTX版
- 捋一捋js面向对象的继承问题
- 计算机课中排序选什么,《计算机应用基础课件》1.6 排序复习课程.ppt
- everything下载哪个版本_Everything敏感信息泄露
- 双11秒查包裹,菜鸟携快递公司推出云客服功能
- 智能变电站调试仿真培训系统 61850规约培训系统 免费送
- 对RS232接口的详细攻破
- 解决python运行selenium程序执行完后,Chrome浏览器自动关闭的问题
- 同时虚拟多个3D桌面
- 为什么说程序员做外包没前途?
- 【题解】【AcWing】3505. 最长ZigZag子序列
- 现代软件工程讲义 7 设计阶段 Spec
- 多功能Python键盘记录工具Radium
- 关联性——相关性分析
- 杀戮空间2服务器协议,杀戮空间2 云服务器搭建
- 如何查看.net core 最新版本的功能
- Ndis网卡驱动是如何操控硬件的
- Windows搭建nexus3.xx