1.对列表进行分组,构建成一个map对象。

键为用户名称,值为用户对象列表。

Person p1 = new Person("张三", new BigDecimal("10.0"));
Person p2 = new Person("王五", new BigDecimal("10.0"));
Person p3 = new Person("李四", new BigDecimal("10.0"));
Person p4 = new Person("李四", new BigDecimal("10.0"));
Person p5 = new Person("张三", new BigDecimal("10.0"));
List<Person> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);

这个我们之前写代码可以需要写成如下的方式:

private Map<String,List<Person >> convertToMap(List<Person > list){

  Map<String,List<Persion>> map=new HashMap<>();
for(Person p: list){ String name=p.getName();
if(map.containsKey(name){      map.get(name).add(p);
}    else{   List<Person> list=new ArrayList();
list.add(p); map.put(name,p); }
}
return map; }

写了一大段代码。

使用steam 就简单了,一行代码解决问题。

Map<String, List<Person>> collect = list.stream().collect(Collectors.groupingBy(person -> person.getName()));
System.out.println(collect);

2.将list 转成 map 对象。

Person p1 = new Person("1","张三", new BigDecimal("10.0"));
Person p2 = new Person("2","王五", new BigDecimal("10.0"));
Person p3 = new Person("3","李四", new BigDecimal("10.0"));
Person p4 = new Person("4","李四", new BigDecimal("10.0"));
Person p5 = new Person("5","张三", new BigDecimal("10.0"));
List<Person> list = new ArrayList<>();
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);

上面的数据 我们转成 Map<String,Person> 对象。

Map<String, Person> nodeMap = bpmSolUsergroups.stream().collect(Collectors.toMap(p->p.getId(), p -> p));

3.对列表进行过滤

public static void main(String[] args) {
List<BpmCheckFile> filesInst =new ArrayList<>();
BpmCheckFile file1=new BpmCheckFile();
file1.setJumpId("1"); BpmCheckFile file11=new BpmCheckFile();
file11.setJumpId("1"); BpmCheckFile file2=new BpmCheckFile();
file2.setJumpId("2"); filesInst.add(file1);
filesInst.add(file11);
filesInst.add(file2); List<BpmCheckFile> files= filesInst.stream().filter(p->p.getJumpId()=="1").collect(Collectors.toList());
System.err.println(files.size()); }

对列表数据进行过滤。

4.将JSONARRAY 转换成 Map对象

public static void main(String[] args) {
String str="[{id:1,name:'ray'},{id:2,name:'zyg'}]";
JSONArray ary=JSONArray.parseArray(str); Map<String, JSONObject> map= ary.stream().collect(Collectors.toMap(i->{JSONObject json=(JSONObject)i;
return json.getString("id");} , p->{JSONObject json=(JSONObject)p;return json;})); System.err.println(map);
}

java stream 集合运算的更多相关文章

  1. java list集合运算

    list集合运算 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.I ...

  2. [改善Java代码]集合运算时使用更优雅的方式

    在初中代数中,我们经常会求两个集合的并集.交集.差集等,在Java中也存在着此 类运算,那如何实现呢? 一提到此类集合操作,大部分的实现者都会说:对两个集合进行遍历,即可求出结果.是的,遍历可以实现并 ...

  3. Java8新特性(1)—— Stream集合运算流入门学习

    废话,写在前面 好久没写博客了,懒了,以后自觉写写博客,每周两三篇吧! 简单记录自己的学习经历,算是对自己的一点小小的督促! Java8的新特性很多,比如流处理在工作中看到很多的地方都在用,是时候扔掉 ...

  4. Java实现 蓝桥杯VIP 算法训练 集合运算

    问题描述 给出两个整数集合A.B,求出他们的交集.并集以及B在A中的余集. 输入格式 第一行为一个整数n,表示集合A中的元素个数. 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素. 第三行 ...

  5. 使用Java Stream,提取集合中的某一列/按条件过滤集合/求和/最大值/最小值/平均值

    不得不说,使用Java Stream操作集合实在是太好用了,不过最近在观察生产环境错误日志时,发现偶尔会出现以下2个异常: java.lang.NullPointerException java.ut ...

  6. 【Java EE 学习 28 上】【oracle学习第二天】【子查询】【集合运算】【几种数据库对象】

    一.子查询 1.为什么要使用子查询:问题不能一步求解或者一个查询不能通过一步查询得到. 2.分类:单行子查询和多行子查询. 3.子查询的本质:一个查询中包含了另外一个或者多个查询. 4.使用子查询的规 ...

  7. java stream collector

    Java Stream API进阶篇 本文github地址 上一节介绍了部分Stream常见接口方法,理解起来并不困难,但Stream的用法不止于此,本节我们将仍然以Stream为例,介绍流的规约操作 ...

  8. [源码解析] 当 Java Stream 遇见 Flink

    [源码解析] 当 Java Stream 遇见 Flink 目录 [源码解析] 当 Java Stream 遇见 Flink 0x00 摘要 0x01 领域 1.1 Flink 1.2 Java St ...

  9. 全面吃透JAVA Stream流操作,让代码更加的优雅

    全面吃透JAVA Stream流操作,让代码更加的优雅 在JAVA中,涉及到对数组.Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行 ...

随机推荐

  1. [PHP] 配置vscode的语法检测消除提示Cannot validate since no PHP executable is set

    默认下载完vscode什么都不做,会提示一下信息Cannot validate since no PHP executable is set. Use the setting 'php.validat ...

  2. Java面试题-基础篇二(干货)

    11.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用 ...

  3. 无序数组中用 快速排序的分治思想 寻找第k大元素

    #include <stdio.h> int *ga; int galen; void print_a(){ ; i < galen; i++){ printf("%d & ...

  4. CUDA -- 内存分配

    CUDA可以认为是一个由软件和硬件构成的并行计算系统,其依赖于GPU的并行计算单元,CUDA有类C的API,方便程序编写.其依赖于CPU和GPU的异构体系,通过在CPU上串行执行环境初始化.内存分配. ...

  5. 深入了解Python

    一.Python的风格 Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读.易维护,并且被大量用户所欢迎的.用途广泛的语言. 设计者开发时总的指导思想是,对于一个特定的问题,只要 ...

  6. SQL Server 修改数据库

    1. 可视化界面修改数据库 (1)右击数据库,然后选择属性. (2)在工具选项卡中,选择[文件]页,可以更改所有者,文件大小,自增量等参数. 2.  使用ALTER Database修改数据库 (1) ...

  7. SQL Server 迁移数据库 (四)备份和还原

    1. 备份 2. 复制 3. 粘贴 4. 还原 截图软件出问题了,估计重启下就好,但是备份还原比较简单,懂的都懂,马上下班了就不贴图了.

  8. c++负数下标

    如何使用负数下标呢? 让数组前面有东西 int y[100]; int *z = y + 50; 这样的话调用\(z[-50]\)就变成了调用\(y[0]\) z[-50] = y[0]; 然后这样就 ...

  9. 重构 改善既有代码的设计 (Martin Fowler 著)

    第1章 重构, 第一个案例 1.1 起点 1.2 重构的第一步 1.3 分解并重组 statement() 1.4 运用多态取代与价格相关的条件逻辑 1.5 结语 第2章 重构原则 2.1 何谓重构 ...

  10. Qt所有滚动条的样式

    const QString QSS_VerticalScrollBar = "" "QScrollBar:vertical{" //垂直滑块整体 "m ...