摘要:

1,List<EntityOld>转换为List<EntityNew>

2,从一个实体类List中取出某个字段组成新的list

3,从list中筛选出符合条件的数据组成新的list

4,求list集合中某个字段的和

5,根据某字段对list进行分组

6,根据某字段对list进行分组并计数

7,根据字段排序

8,多条数据取第一条

正文:

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操作整理的更多相关文章

  1. JDK8 Stream操作整理

    1,forEach this.quoteItemList.forEach(p -> p.setMode(mode)); 2,获取对话属性,去重后生成集合 List<String> p ...

  2. 大型网站技术架构(四)--核心架构要素 开启mac上印象笔记的代码块 大型网站技术架构(三)--架构模式 JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)

    大型网站技术架构(四)--核心架构要素   作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载.此篇已收录至<大型网站技 ...

  3. JDK8的Stream操作

    原文:https://mp.weixin.qq.com/s/N2zor5RzuHHTHQLHWVBttg 作者:思海同学  好好学java 其他资料:https://mp.weixin.qq.com/ ...

  4. java集合(3)-Java8新增的Stream操作集合

    Java8新增了Stream,IntStream,LongStream,DoubleStream等流式API,这些API代表多个支持串行和并行聚集操作的元素.上面的4个接口中,Stream是一个通用的 ...

  5. IntelliJ IDEA中如何优雅的调试Java Stream操作

    Stream操作是Java 8推出的一大亮点!虽然java.util.stream很强大,但依然还是有很多开发者在实际工作中很少使用,其中吐槽最多的一个原因就是不好调试,一开始确实是这样,因为stre ...

  6. Java 8创建Stream流的5种方法

    不知不觉间,Java已经发展到13了,来不及感慨时间过得真的太快了,来不及学习日新月异的技术更新,目前大多数公司还是使用的JDK8版本,一方面是版本的稳定,另一方面是熟悉,所以很多公司都觉得不升级也挺 ...

  7. JDK8 Stream 数据流效率分析

    JDK8 Stream 数据流效率分析 Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型: Stream<T> ...

  8. 详解Java 8中Stream类型的“懒”加载

    在进入正题之前,我们需要先引入Java 8中Stream类型的两个很重要的操作: 中间和终结操作(Intermediate and Terminal Operation) Stream类型有两种类型的 ...

  9. Java基础(十一) Stream I/O and Files

    Java基础(十一) Stream I/O and Files 1. 流的概念 程序的主要任务是操纵数据.在Java中,把一组有序的数据序列称为流. 依据操作的方向,能够把流分为输入流和输出流两种.程 ...

随机推荐

  1. computed 计算选项

    computed 的作用主要是对原数据进行改造输出.改造输出:包括格式的编辑,大小写转换,顺序重排,添加符号……. 格式化输出结果 我们先来做个读出价格的例子:我们读书的原始数据是price:100 ...

  2. 【译】第43节---EF6-自定义约定

    原文:http://www.entityframeworktutorial.net/entityframework6/custom-conventions-codefirst.aspx Code-Fi ...

  3. linux 基础命令(12月25日笔记)

    1.  cp指令指令:cp          (copy,复制)作用:复制文件/文件夹到指定的位置语法:#cp [-r] 被复制的文档路径 文档被复制到的路径选项:         -r:recurs ...

  4. JSON平铺功能的实现(JS操作JSON数据)

    一.什么是JSON平铺 JSON平铺分成两种: 平铺的json转树结构的json 例如: { a: 'value', b: 'b1.value' } // 转换成=> { a: 'value', ...

  5. [转]pugixml使用教程

    转自:https://www.cnblogs.com/ltm5180/p/3989125.html pugixml介绍 pugixml是一个高性能.轻量级并且简单易用的xml解析库,支持UTF8 en ...

  6. leecode第七十题(爬楼梯)

    class Solution { public: int climbStairs(int n) { vector<unsigned long long> num;//斐波那契数列 num. ...

  7. git的安装以及生成ssh key

    安装git 在ubuntu系统下输入以下命令安装git软件: sudo apt-get install git 输入以下命令查看git是否安装成功: git --version 如下图所示则表示安装成 ...

  8. Python __init__.py 文件使用

    __init__.py的主要作用是: 1. Python中package的标识,不能删除 2. 定义__all__用来模糊导入 3. 编写Python代码(不建议在__init__中写python模块 ...

  9. idataway_前端

    一半架构,一半标准.---纯属个人意见 ----------------------------------------- 基本的插件:(尽量使用iviews) 1.传输图片. 2.下拉框.日期控件. ...

  10. Angular 学习笔记 ( 创建 library, 转换老旧的 library )

    更新 : 2018-10-28 不知道为什么在 ng 跑一直做不到 .d.ts 最后发现,如果有一个插件 propagating-hammerjs.ts 那么就在 root create 一个 pro ...