【Java】【6】JDK8 Stream操作整理
摘要:
1,List<EntityOld>转换为List<EntityNew>
正文:
1,List<EntityOld>转换为List<EntityNew>
List<EntityOld> list = oldList;
List<EntityNew> newList = list.stream().map(EntityNew::new).collect(Collectors.toList());
2,从一个实体类List中取出某个字段组成新的list
List<EntityOld> list = oldList;
List<String> idList = list.stream().map(EntityOld::getOldId).collect(Collectors.toList());
3,从list中筛选出符合条件的数据组成新的newList
普通for循环:
List<Student> list = new ArrayList<>(); //Student1: name:张三;age:18 //Student2: name:张三;age:20
List<StudentVo> newList = new ArrayList<>();
list.stream().forEach(item -> {
if (item.getAge() > 18) {
StudentVo info = new StudentVo();
info.setName(item.getName());
newList.add(info);
}
});
加filter:
//超过18岁
List<Student> newList = list.stream().filter(i -> this.checkAgeOver18(i.getAge())).collect(Collectors.toList()); private Boolean checkAgeOver18 (int age) {
return age > 18;
} //简化版,但是条件复杂的话最好就封装成一个方法了
List<Student> newList = list.stream().filter(i -> i.getAge() > 18).collect(Collectors.toList());
4,求list集合中某个字段的和
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("所有数之和 : " + stats.getSum());
System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("平均数 : " + stats.getAverage());
List<Student> list = new ArrayList<>(); //Student1: name:张三;age:18 //Student2: name:张三;age:20
Integer result = list.stream().collect(Collectors.summingInt(Student::getAge));
System.out.println("所有学生年龄之和 : " + reuslt);
5,根据某字段对list进行分组
List<Fruit> fruitList = Lists.newArrayList(new Fruit("apple", 6),new Fruit("apple", 6),
new Fruit("banana", 7), new Fruit("banana", 7),
new Fruit("banana", 7), new Fruit("grape",8)); Map<String, List<Fruit>> groupMap = fruitList.stream().collect(Collectors.groupingBy(Fruit::getName));
6,根据某字段对list进行分组并计数
//输出结果是{banana=3, apple=2, grape=1}
Map<String, Long> map = fruitList.stream().collect(Collectors.groupingBy(Fruit::getName,Collectors.counting()));
7,根据字段排序
//根据name字段倒排
List<Fruit> list = fruitList.stream().sorted(Comparator.comparing(Fruit::getName).reversed()).collect(Collectors.toList());
8,多条数据取第一条
//equalsIgnoreCase:不考虑大小写;find.isPresent()可用来判断数据是否存在
Optional<Fruit> find = fruitList.stream().filter(i -> i.getName().equalsIgnoreCase("apple")).findFirst();
补充:
1,List<EntityOld>转换为List<EntityNew>
注意:实体类EntityNew中需要有一个EntityOld的转换方法
EntityNew.java
public class EntityNew {
private String newId; private String avatar; //转换方法*
public EntityNew (EntityOld item) {
this.newId = item.getOldId() == null ? "" : item.getOldId();
} public String getNewId() {
return newId;
} public void setNewId(String newId) {
this.newId = newId;
} public String getAvatar() {
return avatar;
} public void setAvatar(String avatar) {
this.avatar = avatar;
}
}
EntityOld.java
public class EntityOld {
private String oldId; private String oldName; public String getOldId() {
return oldId;
} public void setOldId(String oldId) {
this.oldId = oldId;
} public String getOldName() {
return oldName;
} public void setOldName(String oldName) {
this.oldName = oldName;
}
}
【Java】【6】JDK8 Stream操作整理的更多相关文章
- JDK8 Stream操作整理
1,forEach this.quoteItemList.forEach(p -> p.setMode(mode)); 2,获取对话属性,去重后生成集合 List<String> p ...
- 大型网站技术架构(四)--核心架构要素 开启mac上印象笔记的代码块 大型网站技术架构(三)--架构模式 JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)
大型网站技术架构(四)--核心架构要素 作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载.此篇已收录至<大型网站技 ...
- JDK8的Stream操作
原文:https://mp.weixin.qq.com/s/N2zor5RzuHHTHQLHWVBttg 作者:思海同学 好好学java 其他资料:https://mp.weixin.qq.com/ ...
- java集合(3)-Java8新增的Stream操作集合
Java8新增了Stream,IntStream,LongStream,DoubleStream等流式API,这些API代表多个支持串行和并行聚集操作的元素.上面的4个接口中,Stream是一个通用的 ...
- IntelliJ IDEA中如何优雅的调试Java Stream操作
Stream操作是Java 8推出的一大亮点!虽然java.util.stream很强大,但依然还是有很多开发者在实际工作中很少使用,其中吐槽最多的一个原因就是不好调试,一开始确实是这样,因为stre ...
- Java 8创建Stream流的5种方法
不知不觉间,Java已经发展到13了,来不及感慨时间过得真的太快了,来不及学习日新月异的技术更新,目前大多数公司还是使用的JDK8版本,一方面是版本的稳定,另一方面是熟悉,所以很多公司都觉得不升级也挺 ...
- JDK8 Stream 数据流效率分析
JDK8 Stream 数据流效率分析 Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型: Stream<T> ...
- 详解Java 8中Stream类型的“懒”加载
在进入正题之前,我们需要先引入Java 8中Stream类型的两个很重要的操作: 中间和终结操作(Intermediate and Terminal Operation) Stream类型有两种类型的 ...
- Java基础(十一) Stream I/O and Files
Java基础(十一) Stream I/O and Files 1. 流的概念 程序的主要任务是操纵数据.在Java中,把一组有序的数据序列称为流. 依据操作的方向,能够把流分为输入流和输出流两种.程 ...
随机推荐
- computed 计算选项
computed 的作用主要是对原数据进行改造输出.改造输出:包括格式的编辑,大小写转换,顺序重排,添加符号……. 格式化输出结果 我们先来做个读出价格的例子:我们读书的原始数据是price:100 ...
- 【译】第43节---EF6-自定义约定
原文:http://www.entityframeworktutorial.net/entityframework6/custom-conventions-codefirst.aspx Code-Fi ...
- linux 基础命令(12月25日笔记)
1. cp指令指令:cp (copy,复制)作用:复制文件/文件夹到指定的位置语法:#cp [-r] 被复制的文档路径 文档被复制到的路径选项: -r:recurs ...
- JSON平铺功能的实现(JS操作JSON数据)
一.什么是JSON平铺 JSON平铺分成两种: 平铺的json转树结构的json 例如: { a: 'value', b: 'b1.value' } // 转换成=> { a: 'value', ...
- [转]pugixml使用教程
转自:https://www.cnblogs.com/ltm5180/p/3989125.html pugixml介绍 pugixml是一个高性能.轻量级并且简单易用的xml解析库,支持UTF8 en ...
- leecode第七十题(爬楼梯)
class Solution { public: int climbStairs(int n) { vector<unsigned long long> num;//斐波那契数列 num. ...
- git的安装以及生成ssh key
安装git 在ubuntu系统下输入以下命令安装git软件: sudo apt-get install git 输入以下命令查看git是否安装成功: git --version 如下图所示则表示安装成 ...
- Python __init__.py 文件使用
__init__.py的主要作用是: 1. Python中package的标识,不能删除 2. 定义__all__用来模糊导入 3. 编写Python代码(不建议在__init__中写python模块 ...
- idataway_前端
一半架构,一半标准.---纯属个人意见 ----------------------------------------- 基本的插件:(尽量使用iviews) 1.传输图片. 2.下拉框.日期控件. ...
- Angular 学习笔记 ( 创建 library, 转换老旧的 library )
更新 : 2018-10-28 不知道为什么在 ng 跑一直做不到 .d.ts 最后发现,如果有一个插件 propagating-hammerjs.ts 那么就在 root create 一个 pro ...