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. Vim基础配置

    vim 个性化设置 安装插件管理器Vundle: 创建目录: mkdir -p ~/.vim/bundle 下载文件: git clone https://github.com/VundleVim/V ...

  2. 16.Linux-LCD驱动(详解)【转】

    转自:https://www.cnblogs.com/lifexy/p/7604011.html 在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构 ...

  3. spark Streaming与kafka的集成消费

    Spark 2.3.3    Kafka   2.11-1.0.2        Java  jdk1.8.0_191           Hbase 1.2.11 from pyspark impo ...

  4. 24.Java基础_IDEA类快捷键_Alt+insert

    这个IDEA我真的爱了,Alt+insert可以定制生成类的各项基本方法 Alt+insert,会打开下面这个界面,选择需要的类方法,按回车 选择该方法下的参数设置,可以使用Ctrl+A全部选中 自动 ...

  5. 常用的架包对应的maven配置

    <!-- https://mvnrepository.com/artifact/com.google.guava/guava --> <dependency> <grou ...

  6. Pwnable-blukat

    ssh blukat@pwnable.kr -p2222 (pw: guest) 连接上去看看c的源码 #include <stdio.h> #include <string.h&g ...

  7. Hyper-V与VirtualBox或VMware虚拟机软件冲突的解决方法(VirtualBox只能创建32位虚拟机)

    Hyper-V与VirtualBox或VMware虚拟机软件冲突的解决方法 Hyper-V是微软的虚拟化软件,功能类似VirtualBox.VMware,可以用来创建虚拟机. 虚拟化软件都是基于CPU ...

  8. luoguP2178 [NOI2015]品酒大会(后缀自动机)

    题意 承接上篇题解 考虑两个后缀的\(lcp\)是什么,是将串反着插入后缀自动机后两个前缀(终止节点)的\(lca\)!!!于是可以在parent tree上DP了. 比后缀数组又简单又好写跑的还快. ...

  9. luoguP3306 [SDOI2013]随机数生成器

    题意 将\(x_1,x_2,x_3...x_n\)写出来可以发现通项为\(a^{i-1}*x_1+b*\sum\limits_{j=0}^{i-2}a^j=a^{i-1}*x_1+b*\frac{1- ...

  10. NOIP模拟赛2(two)

    题目描述 Description 很久很久很久以前,方方方造了一台计算机,计算机中开始有一个数 \(0\) .方方方想要让这个数变成 \(a\) ,他打算每次选择一个整数,把计算机中当前的数按位或上这 ...