【精品】集合list去重

示例一:对于简单类型,比如String

    public static void main(String[] args) {List<String> list = new ArrayList< >();list.add("aaa");list.add("bbb");list.add("bbb");list.add("ccc");list.add("abc");list.add("abc");list.add("abd");list.add("cba");list.add("cba");for (String s : list) {System.out.print(s+"\t");}System.out.println("\n-----------------");//方法一:利用Set去重Set<String> set = new HashSet< >();set.addAll(list);for (String s : set) {System.out.print(s+"\t");}System.out.println("\n-----------------");//方法二:利用TreeSet集合特性排序+去重:TreeSet可以将字符串类型的数据按照字典顺序进行排序,首字母相同则看第二位List<String> list2 = new ArrayList<>(new TreeSet<>(list));for (String s : list2) {System.out.print(s+"\t");}System.out.println("\n-----------------");//方法三:LinkedHashSet虽然可以去重,但是根据他的特性,他不能对数据进行排序,只能维持原来插入时的秩序List<String> list3 = new ArrayList<>(new LinkedHashSet<>(list));for (String s : list3) {System.out.print(s+"\t");}System.out.println("\n-----------------");//方法四:用list.contains()的方法进行判断,然后将其添加到新的list当中,元素的顺序不发生改变List<String> list4 = new ArrayList<>();for (String item : list) {if (!list4.contains(item)) {list4.add(item);}}for (String s : list4) {System.out.print(s+"\t");}System.out.println("\n-----------------");//方法五:使用Java8特性去重:把list集合->Stream流,然后对流用distinct()去重,再用collect()收集List<String> list5 = list.stream().distinct().collect(Collectors.toList());for (String s : list5) {System.out.print(s+"\t");}System.out.println("\n-----------------");//方法六:使用list自身方法remove():将同一个list用两层for循环配合.equals()方法,有相同的就用remove()方法剔除掉,然后得到一个没有重复数据的listfor (int i = 0; i < list.size()-1; i++) {for (int j = list.size()-1; j >i; j--) {if(list.get(i).equals(list.get(j))){list.remove(j);}}}for (String s : list) {System.out.print(s+"\t");}}

结果:
在这里插入图片描述

示例二:对于复杂类型,根据指定属性去重

测试代码:

public static void main(String[] args) {List<Dept> depts = new ArrayList<>();depts.add(new Dept(10, "ACCOUNTING", "NEWYORK"));depts.add(new Dept(20, "RESEARCH", "DALLAS"));depts.add(new Dept(20, "RESEARCH", "DALLAS"));depts.add(new Dept(30, "SALES", "CHICAGO"));depts.add(new Dept(30, "SALES", "CHICAGO"));depts.add(new Dept(30, "OPERATIONS", "BOSTON"));//方法一:List<Dept> res = depts.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Dept::getDeptno))), ArrayList::new));res.forEach(System.out::println);//方法二:List<Integer> deptnoList = new ArrayList<>();List<Dept> res2 = depts.stream().filter(item -> {boolean flag = !deptnoList.contains(item.getDeptno());deptnoList.add(item.getDeptno());return flag;}).collect(Collectors.toList());res2.forEach(System.out::println);}

结果:

在这里插入图片描述

示例三:对于复杂类型,根据指定属性去重(建议✨✨✨✨✨)

public class DemoTest {public static void main(String[] args) {List<Dept> depts = new ArrayList<>();depts.add(new Dept(10, "ACCOUNTING", "NEWYORK"));depts.add(new Dept(20, "RESEARCH", "DALLAS"));depts.add(new Dept(20, "RESEARCH", "DALLAS"));depts.add(new Dept(30, "SALES", "CHICAGO"));depts.add(new Dept(30, "SALES", "CHICAGO"));depts.add(new Dept(30, "OPERATIONS", "BOSTON"));//filter参数为true则保留depts.stream().filter(distinctByKey(Dept::getDeptno)).forEach(System.out::println);}private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {Map<Object,Boolean> seen = new ConcurrentHashMap<>();//putIfAbsent方法添加键值对,如果map集合中没有该key对应的值,则直接添加,并返回null,如果已经存在对应的值,则依旧为原来的值。//如果返回null表示添加数据成功(不重复),不重复(null==null :TRUE)return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;}}

结果:
在这里插入图片描述

示例四:对于复杂类型,根据指定属性去重

    public static void main(String[] args) {List<Dept> depts = new ArrayList<>();depts.add(new Dept(10, "ACCOUNTING", "NEWYORK"));depts.add(new Dept(20, "RESEARCH", "DALLAS"));depts.add(new Dept(20, "RESEARCH", "DALLAS"));depts.add(new Dept(30, "SALES", "CHICAGO"));depts.add(new Dept(30, "SALES", "CHICAGO"));depts.add(new Dept(30, "OPERATIONS", "BOSTON"));final List<Dept> res = depts.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Dept::getDeptno))), ArrayList::new));res.forEach(System.out::println);}

结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/519612.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【蓝桥杯基础算法】dfs(上)组合数,全排列

刚接触算法&#xff0c;有没有被递归又循环的dfs吓到&#xff1f;没关系&#xff0c;几个例题就可以彻底掌握&#xff01; 1.全排列 1-n的全排列,如输入3&#xff0c;按顺序对1-3进行排列 //枚举 #include<iostream> #include<algorithm> #include<cstring>…

Unity UGUI之Slider基本了解

在Unity中&#xff0c;Slider&#xff08;滑动条&#xff09;是一种常用的用户界面控件之一&#xff0c;允许用户通过拖动滑块来选择一个数值。常常应用于调节数值&#xff08;如调节音量、亮度、游戏难度等&#xff09;、设置选项等。 以下是Slider的基本信息和用法: 1、创建…

WPS/Office 好用的Word插件-查找替换

例如&#xff1a;一片文档&#xff1a;…………泰山…………泰&#xff08;少打了山字&#xff09;………… 要是把“泰”查找替换为“泰山”&#xff0c;就会把前面的“泰山”变成“泰山山”&#xff0c;这种问题除了再把“泰山山”查找替换为“泰山”&#xff0c;有没有更简单…

SAR ADC学习笔记(4)

CDAC电容阵列 一、电容失配 二、电容失配对CDAC线性度的影响 1.电容失配对DNL的影响 2.电容失配对INL的影响 三、分段结构的CDAC 四、CDAC开关切换方案&#xff1a;传统开关切换策略 第一次比较阶段&#xff1a;如果VP(1)-VN(1)<0 第一次比较阶段&#xff1a;如果VP(1)-VN…

opengl 学习(三)-----着色器

着色器 分类demo效果解析教程 分类 OPengl C demo #include "glad/glad.h" #include "glfw3.h" #include <iostream> #include <cmath> #include <vector>#include <string> #include <fstream> #include <sstream>…

主语补足语SC【语法笔记】

1.主语补足语的作用是什么 2.主语补足语与宾语补足语的区别与联系是什么 3.see do 与 doing &#xff0c;在进行主补与宾补互换时候&#xff0c;不同点是什么 4.主语补足语由什么构成 5.例题

Mybatis-Plus Mapper映射文件使用

介绍 MyBatis 的真正强大在于它的语句映射&#xff0c;这是它的魔力所在。由于它的异常强大&#xff0c;映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比&#xff0c;你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本&#xff0…

T01类加载机制

类加载机制 类加载运行全过程 当我们用java命令运行某个类的main函数启动程序时&#xff0c;首先需要通过类加载器把主类加载到JVM public class Math {public static final int initData 666;public static User user new User();public int compute() {int a 1;int b …

[LeetCode][239]【学习日记】滑动窗口最大值——O(n)单调队列

题目 239. 滑动窗口最大值 难度&#xff1a;困难相关标签相关企业提示 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。 示例 1…

Vue中如何处理用户权限?

在前端开发中&#xff0c;处理用户权限是非常重要的一个方面。Vue作为一种流行的前端框架&#xff0c;提供了很多便捷的方式来管理用户权限。本文将介绍一些Vue中处理用户权限的方法 1. 使用路由守卫 Vue Router提供了一个功能强大的功能&#xff0c;即导航守卫&#xff08;N…

testvue-个人中心

header.vue(右上角) <template><div class="header"><!-- 折叠按钮 --><div class="collapse-btn" @click="collapseChage"><i v-if="!collapse" class="el-icon-s-fold"></i><…

使用java批量写入环境变量

环境需求 jdk版本&#xff1a;1.8 jna依赖&#xff1a; <dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>5.10.0</version></dependency><dependency><groupId>net.java.…