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唯一不能重 ...
随机推荐
- 记录-C#给图片增加文字
业务需要动态给图片增加文字(书本的封面图片),修改字体大小.字体.颜色.控制位置 测试代码: 1 string path = @"E:\cover.png"; 2 3 Bitmap ...
- 设备管理笔记1-oee
什么是oee 类似于一种设备管理模型,如软件行业的质量模型.cmmi模型等 指标包括什么? 正常指标应该是多少,目前我们的指标为多少? 制造行业存在的6大问题分别是什么 指标包括什么? 包括 可用性性 ...
- Delphi 禁止重复运行程序的方法
第一种方法,使用"过程调用" procedure Del; // 自定义过程 var Mutex: THandle; begin Mutex := CreateMutex(nil, ...
- unigui的错误delphi clientHeight:property clientheight does not exist【10】
在unigui运行中发现这样的错误clientHeight:property clientheight does not exist. 这是啥原因.从老版本中复制过来的代码含dfm会出现这样的错误. ...
- Git的基础使用(一)
Git版本管理工具的作用: (1)完整的记录项目代码变化的过程 (2)备份每一个变化过程的代码版本 (3)多人协同开发 1.配置全局变量 (1)配置用户名 git config --global us ...
- Asp.net mvc基础(九)使用DropDownList下拉列表
第一种下拉列表写法: 后端 前端 第二种下拉列表写法: 使用Html辅助方法@Html.DropDownList("名称","List<SelectListItem ...
- AI提示词:一个通用C++ ECS系统实现(事件条件动作系统)
AI提示词 using eca_cond = bool(*)(...); using eca_action = void(*)(...); class eca_info { public: eca_c ...
- js判断iOS还是Android
/** * 运行设备引擎, 即iOS, Android还是H5 * 返回值注意大小写 * @return iOS, Android, H5 */ function engineType() { let ...
- doctrine 与 mysql 数据类型的详细转换规则。
doctrine 与 mysql 数据类型的详细转换规则 // mysql -> doctrine array( 'tinyint' => 'boolean', 'smallint' =& ...
- python 处理word 分页符、分节符
import docx doc1 =docx.Document(r"C:\Users\Administrator\Desktop\test.docx") doc1.paragrap ...