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唯一不能重 ...
随机推荐
- python py文件名称不能和库名称一样,否则报错module 'requests' has no attribute 'post'
这个问题自己犯过几次,加深一下记忆
- Django实战项目-学习任务系统-发送短信通知
接着上期代码内容,继续完善优化系统功能. 本次增加发送短信通知功能,学习任务系统发布的任务,为了更加及时通知到学生用户,再原有发送邮件通知基础上,再加上手机短信通知功能. 第一步:开通短信通知服务 目 ...
- rsarsa-给定pqe求私钥对密文解密
题目: Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters ...
- 如何删除Docker Swarm中的Node
好吧,我又回来了...断了那么久主要是因为懒...现在有空会更新一些docker相关的知识.本文主要是总结下在工作中需要管理Docker Swarm中的Node遇到的问题:如何删除一个Swarm中的N ...
- Docker top 命令
Docker 命令大全Docker 命令大全docker top :查看容器中运行的进程信息,支持 ps 命令参数.语法docker top [OPTIONS] CONTAINER [ps OPTIO ...
- CentOS 7 下 Docker 的离线安装方法
现遇到部分学校提供的服务器并没有外网连接,故需要在断网条件下安装 Docker ,本贴简述断网安装 Docker 的方法. 去 Docker 或者相关镜像源中下载 Docker RPM 包,以下链接的 ...
- Windows 提权-手工枚举
本文通过 Google 翻译 Manual Enumeration – Windows Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别 ...
- cURL 工具库基本使用
cURL(Client URL)是一个功能强大的工具和库,用于与各种网络协议进行交互,cURL常用的一些参数和示例代码: -X, --request :指定HTTP请求方法(GET.POST.PUT等 ...
- 【JDBC】总结
JDBC核心技术 第1章:JDBC概述 1.1 数据的持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数 ...
- 【Linux】3.3 关机、重启和用户登录注销
关机.重启和用户登录注销 1. 关机&重启命令 1.1 shutdown shutdown -h now:表示立即关机 shutdown -h 1:表示1分钟后关机 shutdown -r n ...