lambda List去重
1、结果
public class Test4 {public static void main(String[] args) {List<Integer> list = Lists.newArrayList();list.add(1);list.add(2);list.add(3);list.add(3);list.add(1);list.add(1);list = list.stream().distinct().collect(Collectors.toList());list.stream().forEach(System.out::println);System.out.println("---------------------------------------");List<Animal> list2 = Lists.newArrayList();list2.add(new Animal("a", 2, 3.3d, 2L, new BigDecimal("5")));list2.add(new Animal("b", 1, 2.3d, 1L, new BigDecimal("2")));list2.add(new Animal("a", 2, 3.3d, 2L, new BigDecimal("5")));list2.add(new Animal("c", 4, 4.3d, 4L, new BigDecimal("3")));//注意点,去重对象的时候,对象值都要相同list2 = list2.stream().distinct().collect(Collectors.toList());list2.stream().forEach(System.out::println);System.out.println("----------------------------");List<Animal> list1 = Lists.newArrayList();list1.add(new Animal("a", 2, 3.3d, 2L, new BigDecimal("5")));list1.add(new Animal("b", 1, 2.3d, 1L, new BigDecimal("2")));list1.add(new Animal("a", 2, 1.3d, 3L, new BigDecimal("1")));list1.add(new Animal("c", 4, 4.3d, 4L, new BigDecimal("3")));list1 = list1.stream().filter(distinctByKey(a -> a.getName() + a.getCount())).collect(Collectors.toList());list1.stream().forEach(System.out::println);}public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {Map<Object, Boolean> seen = new ConcurrentHashMap<>(16);return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;}}
2、基本类型去重
关键:
list = list.stream().distinct().collect(Collectors.toList());
3、对象去重
@Data
public class Animal {private String name;private Integer count;private Double weight;private Long pri;private BigDecimal money = BigDecimal.ZERO;public Animal() {}public Animal(String name, Integer count, Double weight, Long pri, BigDecimal money) {this.name = name;this.count = count;this.weight = weight;this.pri = pri;this.money = money;}@Overridepublic boolean equals(Object o) {if (this == o) {return true;}if (o == null || getClass() != o.getClass()) {return false;}Animal animal = (Animal) o;return Objects.equals(name, animal.name) &&Objects.equals(count, animal.count) &&Objects.equals(weight, animal.weight) &&Objects.equals(pri, animal.pri) &&Objects.equals(money, animal.money);}@Overridepublic int hashCode() {return Objects.hash(name, count, weight, pri, money);}}
注意点:如果你想使用distinct()方法去重对象,那么你的对象一定要重写hashcode和equals方法
4、方法
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {Map<Object, Boolean> seen = new ConcurrentHashMap<>(16);return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;}
lambda List去重相关推荐
- Java中lambda表达式去重_JAVA8中Lambda和Stream
Java8于2014年3月份发布,其主要更新的特性有:函数式接口.Lambda 表达式.集合的流式操作.注解的更新.安全性的增强.IO\NIO 的改进.完善的全球化功能等,本文将介绍Lambda表达式 ...
- lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- lambda 对象去重_lambda去重
lambda去重使用collectingAndThen方法 list 对象中,如果根据Object的单个属性进行过滤去重, 则: List userList = users.stream() .col ...
- lambda 对象去重_最火的java8新特性:Lambda 表达式
主要内容 1. Lambda 表达式 2. 函数式接口 3. 方法引用与构造器引用 4. Stream API 5. 其他新特性 Java 8新特性简介 速度更快 代码更少(增加了新的语法 Lambd ...
- java中给对象的List集合去重的几种方法(Lambda)
java中给对象的List集合去重的几种方法 前言 一.lambda表达式的去重方式 二.Stream API中的collect去重方法 三.Stream API 中的distinct方法去重 前言 ...
- stream去重_重复数据如何处理?List集合去重的四种方式
List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍.但是,有时候难免会遇到集合里的数据是重复的,需要进行去除. ...
- 算法探索_多序列合并去重
最近项目中用到了合并去重的相关需求,于是这边总结了不同的去重方式 这边是深海封装的去重合并方法: /**作者:赵星海*时间:2020/6/15 17:46*用途:多序列合并去重*/public Arr ...
- 使用lambda去重、map排序、按任意时间间隔(小时、半小时、分钟)进行结果统计
1.lambda去重 public static <T> Predicate<T> distinctByKey(Function<? super T, Object> ...
- lambda List实现某列去重的解决方案采用扩展方法
lambda List实现某列去重的解决方案采用扩展方法 参考文章: (1)lambda List实现某列去重的解决方案采用扩展方法 (2)https://www.cnblogs.com/hgmyz/ ...
最新文章
- SAP卢东明:大数据同样需要小身材
- 【Go语言】【12】GO语言的结构体
- HBase单机环境搭建
- Windows环境下32位汇编程序设计C版code--第五章(一)
- linux 命令行启动虚拟机
- 【NLP】ACL 2010-2020研究趋势总结
- JavaScript:Object.prototype.toString方法的原理
- 【渝粤教育】国家开放大学2018年秋季 0350-21T幼儿园课程论 参考试题
- CSU 1573 最多的数字
- 值传递,引用传递,指针传递
- linux dhcp服务启动失败
- 后缀转中缀表达式_中缀转后缀表达式代码实现(下)及计算器完整版
- (译)我的第一游戏完成之后的5点心得体会
- 将一幅图像转换为灰度图
- 使用Spring的AbstractRoutingDataSource实现多数据源切换
- 银行卡系统(面向对象进阶习题)
- 欧几里德算法 扩展欧几里德算法 求解丢番图方程
- 开源框架Volley的使用《一》
- HTML识别文本空格回车换行展示
- Tableau自定义分类调色板