在java日常开发中,会遇到对ist进行去重处理的需求,下面对其解决方式进行浅析。
List 去重指的是将 List 中的重复元素删除掉的过程。
方式有3中实现思路,1通过循环判断当前元素是否存在多个,若存在多个,则删除此重复项,最后得到去重后的list,判断是否存在多个,注意需要重写equals和hash方法。2使用set集合去重,利用set集合自身自带的去重特性。3使用jdk8中stream流的去重功能。
实例1:循环判断可以通过for循环

public class DistinctTest {public static void main(String[] args) {// 创建并给 List 赋值List<Person> list = new ArrayList<>();list.add(new Person("李四", "123456", 20));list.add(new Person("张三", "123456", 18));list.add(new Person("王五", "123456", 22));list.add(new Person("张三", "123456", 18));// 去重操作List<Person> newList = new ArrayList<>(list.size());list.forEach(i -> {if (!newList.contains(i)) { // 如果新集合中不存在则插入newList.add(i);}});// 打印集合newList.forEach(p -> System.out.println(p));}
}class Person {private String name;private String password;private int age;public Person(String name, String password, int age) {this.name = name;this.password = password;this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) {return true;}if (o == null || getClass() != o.getClass()) {return false;}Person person = (Person) o;return age == person.age && Objects.equals(name, person.name) && Objects.equals(password, person.password);}@Overridepublic int hashCode() {return Objects.hash(name, password, age);}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", password='" + password + '\'' +", age=" + age +'}';}
}

实例2:循环判断可以通过iterater循环

public static void main(String[] args) {// 创建并给 List 赋值List<Person> list = new ArrayList<>();list.add(new Person("李四", "123456", 20));list.add(new Person("张三", "123456", 18));list.add(new Person("王五", "123456", 22));list.add(new Person("张三", "123456", 18));// 去重操作Iterator<Person> iterator = list.iterator();while (iterator.hasNext()) {// 获取循环的值Person item = iterator.next();// 如果存在两个相同的值if (list.indexOf(item) != list.lastIndexOf(item)) {// 移除相同的值iterator.remove();}}// 打印集合信息list.forEach(p -> System.out.println(p));}

实例3:通过set集合

public static void main(String[] args) {// 创建并给 List 赋值List<Person> list = new ArrayList<>();list.add(new Person("李四", "123456", 20));list.add(new Person("张三", "123456", 18));list.add(new Person("王五", "123456", 22));list.add(new Person("张三", "123456", 18));// 去重操作HashSet<Person> set = new HashSet<>(list);// 打印集合信息set.forEach(p -> System.out.println(p));}

实例4:使用stream

public static void main(String[] args) {// 创建并给 List 赋值List<Person> list = new ArrayList<>();list.add(new Person("李四", "123456", 20));list.add(new Person("张三", "123456", 18));list.add(new Person("王五", "123456", 22));list.add(new Person("张三", "123456", 18));// 去重操作list = list.stream().distinct().collect(Collectors.toList());// 打印集合信息list.forEach(p -> System.out.println(p));}

测试结果:

Person{name='李四', password='123456', age=20}
Person{name='张三', password='123456', age=18}
Person{name='王五', password='123456', age=22}

推荐使用stream流的方式进行去重处理,使用jdk8的新特性,深刻理解其他的方式。

Java之list去重浅析相关推荐

  1. Java数据库连接池--DBCP浅析

    转载自   Java数据库连接池--DBCP浅析 前言对于数据库连接池, 想必大家都已经不再陌生, 这里仅仅设计Java中的两个常用数据库连接池: DBCP和C3P0(后续会更新). 一. 为何要使用 ...

  2. Java的List去重

    Java的List去重 1.contains()去重 ArrayList 的 contains() 方法的时间复杂度是O(n)O(n)O(n)的. 使用contains 进行判断去重的 时间复杂度是O ...

  3. Java ArrayList 实现去重

    对一份文件中的姓名去重后以列表形式输出: 文件内容: 代码实现: package Array_list_study; import java.util.*; import java.io.*; // ...

  4. java set 对象去重_JAVA对象去重

    JAVA对象去重比较恶心的说 需求:我要做的是去重每个权限的菜单,菜单表结构是 ID RoleID MenuID  获取的菜单表 应该是MenuID不能重复的 所以写菜单表的实体类,重写equals ...

  5. java list 合并去重_java 怎么把多个list 合并成一个去掉重复的

    展开全部 示例代码636f707962616964757a686964616f31333361313838: public static void main(String[] args){ List  ...

  6. java list 字段去重_java list 根据对象一个字段去重

    1.主要思路就是根据从写equals 以及 hashCode 方法. 代码如下: package com.bfd.unibase.modules.dataview.entity; import org ...

  7. 用Java简便地去重+排序(洛谷P1059题题解,Java语言描述)

    前言 Java终于不恶心我了,天哪,TreeSet万岁(坏了,暴露主题了,我的天哪~~) 题目要求 P1059题目链接 分析 当然,我们可以编写排序算法和去重算法,balabala,但我们用的是Jav ...

  8. 【转载】Java 内存分配全面浅析

    本文将由浅入深详细介绍Java内存分配的原理,以帮助新手更轻松的学习Java.这类文章网上有很多,但大多比较零碎.本文从认知过程角度出发,将带给读者一个系统的介绍. 本文转载自袭烽大神的博客,原文链接 ...

  9. java printf与println_浅析Java中print、printf、println的区别

    我们的程序员在开发的时候,都会使用到很多不同的功能,但是有些功能是大同小异,别着急,下文是爱站技术频道小编为大家带来的浅析Java中print.printf.println的区别,希望对你学习有帮助! ...

最新文章

  1. 数学建模大赛赛题解析:Mathorcup高校数学建模挑战赛-基于收得率预测模型的转炉炼钢的成本优化
  2. python 模块与包_Python 模块与包
  3. 根据条件动态修改element 组件深层次样式
  4. 前端学习(1977)vue之电商管理系统电商系统之按钮与文本框的切换
  5. react使用less预编译语言和本地代理配置
  6. 随想录(libc.so和ld.so调试)
  7. linux下使用过的命令总结(未整理完)
  8. 电力企业计量生产运行系统总体解决方案
  9. 《算法》第4版 导读
  10. 青少年c语言培训,青少年信息学奥赛培优教程·入门篇(2020年01月)
  11. 科普:互联网的岗位职责和技能
  12. aac +sbr +ps
  13. allwinner: add sun8i-emac driver
  14. Simulink simscape绳索和滑轮的使用总结
  15. C++课后作业 3. 教材习题4_8:定义Dog类,包含age和weight信息
  16. Matlab画三维图笔记
  17. Windows双显示器扩展怎么设置上下扩展
  18. Flink on Yarn三部曲之一:准备工作
  19. TCP通信常用的send,sendto,recv,recvfrom函数详解
  20. 低成本、云边端、软硬件一体化智能视频监控解决方案

热门文章

  1. ZYNQ-迷恋ZYNQ-FPGA开发板资源分享
  2. 神经网络预测参数对比图,神经网络预测结果分析
  3. js里双间隔问号表达式,类似于A?B?C:D:E的表达式
  4. Oracle FIND_IN_SET函数
  5. 51单片机蓝牙模块BT05一定要看这个!
  6. cmd 新增dns_CMD配置IP、DNS、GATEWAY、gwmetric
  7. android 视频格式不能播放,Android引入IjkPlayer无法播放mkv格式视频的解决方案
  8. 2-28 数据库链接操作_JDBC_02
  9. 嵌入式linux 必懂概念科普篇
  10. 光盘镜像,如何打开光盘镜像文件?