list.stream笔记-过滤-去重-转map、List等
代码
import vo.PosDataDetailVo;
import java.util.*;
import java.util.stream.Collectors;
public class AbcMain {
public static void main(String[] args) throws InterruptedException {
List<PosDataDetailVo> list = new ArrayList<>();
PosDataDetailVo posDataDetailVo = new PosDataDetailVo();
posDataDetailVo.setAccountNo("张三");
posDataDetailVo.setBankCard("A1");
list.add(posDataDetailVo);
PosDataDetailVo posDataDetailVo2 = new PosDataDetailVo();
posDataDetailVo2.setAccountNo("");
posDataDetailVo2.setBankCard("B2");
list.add(posDataDetailVo2);
PosDataDetailVo posDataDetailVo3 = new PosDataDetailVo();
posDataDetailVo3.setAccountNo("李四");
posDataDetailVo3.setBankCard("C3");
list.add(posDataDetailVo3);
PosDataDetailVo posDataDetailVo4 = new PosDataDetailVo();
posDataDetailVo4.setAccountNo("李四");
posDataDetailVo4.setBankCard("D5");
list.add(posDataDetailVo4);
System.out.println("------------");
System.out.println("按照 AccountNo 去重");
List<PosDataDetailVo> collect2 = list.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(PosDataDetailVo::getAccountNo))
), ArrayList::new)
);
for (PosDataDetailVo dataDetailVo : collect2) {
System.out.println(dataDetailVo);
}
System.out.println("------------");
Thread.sleep(2000);
System.out.println("循环出 AccountNo = 张三 的数据");
list.stream().filter(posDataDetailVo1 -> "张三".equals(posDataDetailVo1.getAccountNo())).forEach(posDataDetailVo1 -> {
System.out.println(posDataDetailVo1);
});
System.out.println("------------");
System.out.println("取出 AccountNo = 李四 的数据");
List<PosDataDetailVo> collect = list.stream().filter(posDataDetailVo1 -> "李四".equals(posDataDetailVo1.getAccountNo())).collect(Collectors.toList());
for (PosDataDetailVo dataDetailVo : collect) {
System.out.println(dataDetailVo);
}
System.out.println("------------");
System.out.println("转为map,AccountNo为key,BankCard为value,并且如果key存在重复就取第二个数据");
Map<String, String> collect1 = list.stream().collect(Collectors.toMap(PosDataDetailVo::getAccountNo, PosDataDetailVo::getBankCard, (v1, v2) -> v2));
System.out.println(collect1);
System.out.println("------------");
System.out.println("将AccountNo = 李四 的数据转为List<String>");
//如果不需要过滤器,那么就删掉filter过滤器
List<String> stringList = list.stream().filter(posDataDetailVo1 -> "李四".equals(posDataDetailVo1.getAccountNo())).map(PosDataDetailVo::getAccountNo).collect(Collectors.toList());
//也可以用下面这种方式,一样的
//List<String> stringList = list.stream().filter(posDataDetailVo1 -> "李四".equals(posDataDetailVo1.getAccountNo())).map(posDataDetailVo1 -> posDataDetailVo1.getAccountNo()).collect(Collectors.toList());
for (String s : stringList) {
System.out.println(s);
}
System.out.println("------------");
System.out.println("List<String>去重");
List<String> myList= Arrays.asList("a","b","b","c","c","d");
List<String> myListNew = myList.stream().distinct().collect(Collectors.toList());
System.out.println(myListNew);
System.out.println("------------");
//查找AccountNo=李四,并且BankCard=D5 的元素,存在返回true,不存在返回fasle
//anyMatch、allMatch、noneMatch自行百度有什么区别
boolean exist = list.stream().anyMatch(data -> {
boolean equals1 = "李四".equals(data.getAccountNo());
boolean equals2 = "D5".equals(data.getBankCard());
return equals1 && equals2;
});
//简写Lambda方式
//boolean exist = list.stream().anyMatch(data -> "李四".equals(data.getAccountNo()) && "D5".equals(data.getBankCard()));
System.out.println(exist);
}
}
运行结果
------------
按照 AccountNo 去重
PosDataDetailVo{accountNo='', bankCard='B2'}
PosDataDetailVo{accountNo='张三', bankCard='A1'}
PosDataDetailVo{accountNo='李四', bankCard='C3'}
------------
循环出 AccountNo = 张三 的数据
PosDataDetailVo{accountNo='张三', bankCard='A1'}
------------
取出 AccountNo = 李四 的数据
PosDataDetailVo{accountNo='李四', bankCard='C3'}
PosDataDetailVo{accountNo='李四', bankCard='D5'}
------------
转为map,AccountNo为key,BankCard为value,并且如果key存在重复就取第二个数据
{=B2, 李四=D5, 张三=A1}
------------
将AccountNo = 李四 的数据转为List<String>
李四
李四
------------
List<String>去重
[a, b, c, d]
------------
true
list.stream笔记-过滤-去重-转map、List等的更多相关文章
- 笔记-爬虫-去重/bloomfilter
笔记-爬虫-去重/bloomfilter 1. 去重 为什么要去重? 页面重复:爬的多了,总会有重复的页面,对已爬过的页面肯定不愿意再爬一次. 页面更新:很多页面是会更新的,爬取这种页面时就 ...
- STL笔记(1)map
STL笔记(1)map STL之map ZZ from http://hi.baidu.com/liyanyang/blog/item/d5c87e1eb3ba06f41bd576cf.html 1. ...
- javaSE学习笔记(11)--- Map
javaSE学习笔记(11)--- Map 1.Map集合 现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Jav ...
- java8新特性——stream笔记
stream对象 Stream IntStream LongStream DoubleStream 创建 常用的三种方式: 使用list对象: list.stream() − 为集合创建串行流. li ...
- JavaScript学习笔记(六)——Map、Set与iterable
在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...
- List stream 对象 属性去重
单值去重不写了,记录对象去重 随手一个对象: @Data @AllArgsConstructor public class Milk { private Integer key; private St ...
- java8 Stream 笔记
stream的定义:对一个源中的一系列元素进行聚合操作. 一系列元素:stream对一组有特定类型的元素提供了一个接口.但是stream并不真正存储元素,元素根据需求被计算出来. 源:stream可以 ...
- 数组去重,排序,重复次数,两个数组合并,两个数组去重,map(),filter(),reduce()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 【Java 8】Stream.distinct() 列表去重示例
在这篇文章里,我们将提供Java8 Stream distinct()示例. distinct()返回由该流的不同元素组成的流.distinct()是Stream接口的方法. distinct()使用 ...
- Java学习笔记之:Java Map集合
一.介绍 通常来说,Map是一个由键值对组成的数据结构,且在集合中每个键是唯一的. 二.笔记 /** * Map:接口. 不是collection的子类 key -value 键值对 key唯一不能重 ...
随机推荐
- 【MATLAB习题】双摇杆机构的运动学分析
1.双摇杆机构概述 双摇杆机构的判别方法: 最长杆长度+最短杆长度 ≤ 其他两杆长度之和,连杆(机架的对杆)为最短杆时. 如果最长杆长度+最短杆长度 >其他两杆长度之和,此时不论以何杆为机架,均 ...
- Qt关于使用QSqlQuary::size()这个函数值返回是-1
QSqlQuary::size( ) 今天做项目的时候,用Qt连接Oracle数据库,前面都是连接成功,但是用SQL语句去操作数据库的时候,发现老是读不到内容,卡了好久. QSqlQuery Rule ...
- go包管理工具 govendor
govendor介绍 govendor 是 GoLang 常用的一个第三方包管理工具,它的出现解决了不同用户在 clone 同一个项目时从外部获取不同依赖库版本的问题. govendor会将项目需要的 ...
- halcon 入门教程(一) 预处理图像 (图像平滑,图像增强,二值化,形态学分析)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/18779326 本来今天想写一下halcon深度学习教程(三)目标检测的,不过今天有显卡的那台电 ...
- linux 根目录与分区
1.2 根目录的建立 大家一般都会知道根目录的产生方式,就是系统使用mount指令,将系统所在的分区挂载到[/]目录中,这样便完成了所谓的根目录.但你是否想过, 虽然看起来合理却有点诡异,因为根目录 ...
- 分析 AIX 和 Linux 性能的免费工具。
一.软件介绍1.分析工具nmon 工具可以帮助在一个屏幕上显示所有重要的性能优化信息,并动态地对其进行更新.这个高效的工具可以工作于任何哑屏幕.telnet 会话.甚至拨号线路.另外,它并不会消耗大量 ...
- 什么是 CSS 设计模式
这是转载的,先收藏到我的博客园. 什么是设计模式? 曾有人调侃,设计模式是工程师用于跟别人显摆的,显得高大上:也曾有人这么说,不是设计模式没用,是你还没有到能懂它,会用它的时候. 先来看一下比较官方的 ...
- Zotero 附件云同步(非 WebDAV 方法)
1.说明 适用范围更广,但是操作步骤较复杂. 使用 zotero 仅同步题录信息,使用其他云同步程序同步文献的附件,此处以坚果云为例进行演示. 准备: zotero 和 坚果云 注册账号 zotero ...
- 国产化-内存数据库tendis-单机安装(完美替代redis)
挺好的产品腾讯能开源还是体现了大厂的担当和格局,赞一个.阿里也开源了一些不错的产品后面讲. Tendis 介绍 Tendis 是腾讯公司开源的一款高性能分布式存储系统,基于 Redis 协议开发,具有 ...
- git 取消 git add 操作
... 按照套路我们在对项目做了一些新增或修改操作后,会很自然的执行 git add 操作, 但是马上又发现好像添加的内容有点不对: 文件名错了 多了个符号 少了点什么 马上发现bug 等等... 总 ...