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去重相关推荐

  1. Java中lambda表达式去重_JAVA8中Lambda和Stream

    Java8于2014年3月份发布,其主要更新的特性有:函数式接口.Lambda 表达式.集合的流式操作.注解的更新.安全性的增强.IO\NIO 的改进.完善的全球化功能等,本文将介绍Lambda表达式 ...

  2. lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

  3. lambda 对象去重_lambda去重

    lambda去重使用collectingAndThen方法 list 对象中,如果根据Object的单个属性进行过滤去重, 则: List userList = users.stream() .col ...

  4. lambda 对象去重_最火的java8新特性:Lambda 表达式

    主要内容 1. Lambda 表达式 2. 函数式接口 3. 方法引用与构造器引用 4. Stream API 5. 其他新特性 Java 8新特性简介 速度更快 代码更少(增加了新的语法 Lambd ...

  5. java中给对象的List集合去重的几种方法(Lambda)

    java中给对象的List集合去重的几种方法 前言 一.lambda表达式的去重方式 二.Stream API中的collect去重方法 三.Stream API 中的distinct方法去重 前言 ...

  6. stream去重_重复数据如何处理?List集合去重的四种方式

    List集合在Java日常开发中是必不可少的,只要懂得运用各种各样的方法就可以大大提高我们开发的效率,适当活用各种方法才会使我们开发事半功倍.但是,有时候难免会遇到集合里的数据是重复的,需要进行去除. ...

  7. 算法探索_多序列合并去重

    最近项目中用到了合并去重的相关需求,于是这边总结了不同的去重方式 这边是深海封装的去重合并方法: /**作者:赵星海*时间:2020/6/15 17:46*用途:多序列合并去重*/public Arr ...

  8. 使用lambda去重、map排序、按任意时间间隔(小时、半小时、分钟)进行结果统计

    1.lambda去重 public static <T> Predicate<T> distinctByKey(Function<? super T, Object> ...

  9. lambda List实现某列去重的解决方案采用扩展方法

    lambda List实现某列去重的解决方案采用扩展方法 参考文章: (1)lambda List实现某列去重的解决方案采用扩展方法 (2)https://www.cnblogs.com/hgmyz/ ...

最新文章

  1. SAP卢东明:大数据同样需要小身材
  2. 【Go语言】【12】GO语言的结构体
  3. HBase单机环境搭建
  4. Windows环境下32位汇编程序设计C版code--第五章(一)
  5. linux 命令行启动虚拟机
  6. 【NLP】ACL 2010-2020研究趋势总结
  7. JavaScript:Object.prototype.toString方法的原理
  8. 【渝粤教育】国家开放大学2018年秋季 0350-21T幼儿园课程论 参考试题
  9. CSU 1573 最多的数字
  10. 值传递,引用传递,指针传递
  11. linux dhcp服务启动失败
  12. 后缀转中缀表达式_中缀转后缀表达式代码实现(下)及计算器完整版
  13. (译)我的第一游戏完成之后的5点心得体会
  14. 将一幅图像转换为灰度图
  15. 使用Spring的AbstractRoutingDataSource实现多数据源切换
  16. 银行卡系统(面向对象进阶习题)
  17. 欧几里德算法 扩展欧几里德算法 求解丢番图方程
  18. 开源框架Volley的使用《一》
  19. HTML识别文本空格回车换行展示
  20. Tableau自定义分类调色板

热门文章

  1. Windows 下部署 Seafile 服务器搭建私人网盘
  2. 微型计算机状态标志,微机原理--指令系统--判断状态标志位!尤其是OF和CF!!...
  3. 献血好几天了,手还是很痛
  4. 函数习题(6):判断一个数是否是回文数
  5. UML用户指南笔记1-------对基本结构建模
  6. Android Sensor 概览
  7. 上海居转户要求的中级职称, 软考中级 算吗?
  8. 杭州亚运会改至2023年9月23日至10月8日举行
  9. Android 迎来 9 周岁生日;IE11 被曝存新安全漏洞
  10. 【小航的算法日记】日期算法