前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

1. 代码写法: (要求 JDK 1.8 或 1.8 以上)

package gentle.entity;import lombok.Data; /**** @author silence* @date 2018/7/6 10:58*/
@Data // 此注解可自动生成set/get、自动重写equals/hashcode 等,不用在代码中书写相关代码。public class User {private String name;private int age;public User( String name, int age) {this.name = name;this.age = age;}
}
  /***  for循环* @param list* @param <T>*/public static <T> void listFor(List<T> list) {list.forEach(each -> System.out.print(each+" "));}/*** 按对象属性去重** @return*/public static List<User> deleteSameByOne(List<User> users) {// 1.单个属性去重return users.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getAge))),ArrayList::new));}/*** 按对象属性去重** @return*/public static List<User> deleteSameByMany(List<User> users) {// 2.多属性去重:把多个属性拼起来( 本质上还是单属性去重 )return users.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(userDep -> userDep.getName() + userDep.getAge()))),ArrayList::new));}/*** 基本数据类型去重** @param list* @param <T>* @return*/public static <T> List<T> deleteSame(List<T> list) {return list.stream().distinct().collect(Collectors.toList());}

2. 测试:

List<User> userList = new ArrayList<User>(){{add(new User("花间",24));}{add(new User("暮云",28));}{add(new User("暮云",28));}{add(new User("彻风",24));}{add(new User("弥禁",16));}{add(new User("清寞",24));}};System.out.println("去掉同龄的:\n"+deleteSameByOne(userList));System.out.println("去掉同龄且同名的:\n"+deleteSameByMany(userList));

3. 运行结果:

集合去重 (集合元素为引用类型)--- java 8 新特性 --- 根据元素单属性、多属性实现去重相关推荐

  1. stream distinct去重_再来看看Java的新特性——Stream流

    半年前开始试着使用Java的新特性,给我印象最深的就是Stream流和Optional.其中Stream提高了看法效率,让代码看起来十分清爽. 为什么要使用流? 摘要中已经说明了,为了提高开发效率.流 ...

  2. java使用迭代器删除元素_使用Java从地图中删除元素

    java使用迭代器删除元素 关于从Java中的Map删除元素的非常简短的文章. 我们将专注于删除多个元素,而忽略了您可以使用Map.remove删除单个元素的Map.remove . 以下Map将用于 ...

  3. 【Java 8 新特性】Java Stream 通过skip()方法跳过前N个子元素

    [Java 8 新特性]Java Stream 通过skip方法跳过前N个子元素 1.skip() 示例 2.skip() vs limit() 参考文献 本页将介绍 Stream.skip方法示例. ...

  4. 跟我学 Java 8 新特性之 Stream 流(二)关键知识点

    转载自   跟我学 Java 8 新特性之 Stream 流(二)关键知识点 我们的第一篇文章,主要是通过一个Demo,让大家体验了一下使用流API的那种酣畅淋漓的感觉.如果你没有实践,我还是再次呼吁 ...

  5. 跟我学 Java 8 新特性之 Stream 流(五)映射

    转载自   跟我学 Java 8 新特性之 Stream 流(五)映射 经过了前面四篇文章的学习,相信大家对Stream流已经是相当的熟悉了,同时也掌握了一些高级功能了,如果你之前有阅读过集合框架的基 ...

  6. Java 8 新特性之Stream API

    1. 概述 1.1 简介 Java 8 中有两大最为重要的改革,第一个是 Lambda 表达式,另外一个则是 Stream API(java.util.stream.*). Stream 是 Java ...

  7. Java 8 新特性之Lambda

    Java 8 新特性之Lambda.Stream.Optional Java 8 新特性之Lambda.Stream.Optional 速度更快 代码更少(增加了新的语法Lambda表达式) 强大的S ...

  8. 跟我学 Java 8 新特性之 Stream 流(七)流与迭代器,流系列大结局

    转载自   跟我学 Java 8 新特性之 Stream 流(七)流与迭代器,流系列大结局 恭喜你们,马上就要学完Java8 Stream流的一整系列了,其实我相信Stream流对很多使用Java的同 ...

  9. 跟我学 Java 8 新特性之 Stream 流(六)收集

    转载自   跟我学 Java 8 新特性之 Stream 流(六)收集 我们前面的五篇文章基本都是在说将一个集合转成一个流,然后对流进行操作,其实这种操作是最多的,但有时候我们也是需要从流中收集起一些 ...

最新文章

  1. 面试必备:Java线程池解析
  2. java的sdk在哪个文件夹_我的计算机中的Java SDK文件夹在哪里? Ubuntu 12.04
  3. Lazy FP状态还原漏洞公布,大多数Intel的酷睿CPU受其影响
  4. easyui js拼接html,class属性失效的问题
  5. 介绍几款好用的Web开发管理工具
  6. 如何设置 homestead zhong redis 开机自启_CentOS安装Redis
  7. uvc能支持多大分辨率_华为手环B5测评:该有的功能一个不缺,甚至还能变身蓝牙耳机...
  8. Qt工作笔记-图形视图框架中的分组,以及添加平行拖动图元
  9. python场景应用方向_python的应用场景及学习方向
  10. ibatis.net:尽可能的使用匿名类型替换 Hashtable
  11. 大势至服务器共享文件监控软件8.6,大势至服务器共享文件夹监控软件、局域网共享管理软件、局域网共享设置软件...
  12. 战略分析思路——沙盘推演逻辑
  13. VC6的fatal error C1010解决办法
  14. 批处理删除文件夹下所有文件和文件夹
  15. JS反转链表 - I
  16. 服务器被攻击 显示503,打开网页后出现503 service unavailable等字样,什么意思
  17. JAVA 115个面试题及个人部分衍生疑问?
  18. 地理信息系统的发展趋势——网格GIS
  19. 学习c/c++ 推荐学习什么书籍?
  20. 学习es6中class——整合阮一峰教程、MDN

热门文章

  1. C#中 ??、 ?、 ?: 、?.、?[ ]、:
  2. 一步步编写操作系统 28 cpu乱序执行
  3. 【Python CheckiO 题解】Bird Language
  4. 【PAT - 甲级1017】Queueing at Bank (25分)(优先队列,模拟)
  5. *【洛谷 - P1025】数的划分(dfs 或 dp 或 母函数,第二类斯特林数Stirling)
  6. 【POJ - 2406】Power Strings (KMP,最小循环节)
  7. 【nyoj - 890】 分东西 (水题 二进制)
  8. 详解两阶段3D目标检测网络 Voxel R-CNN:Towards High Performance Voxel-based 3D Object Detection
  9. c 跟r语言运行速度,1. R语言运行效率分析(5)
  10. git 怎么提交忽略文件夹_git 设置忽略文件提交的几种方式