Java集合相关学习——如何实现List集合的去重操作?
Posted 张起灵-小哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合相关学习——如何实现List集合的去重操作?相关的知识,希望对你有一定的参考价值。
废话就不多说了,直接开始上代码:👇👇👇
1.方法一
首先我们可以创建一个新的List集合,通过循环原始的List集合判断循环的元素,是否已存在于新集合,如果不存在则插入,否则就忽略,这样循环完,最终得到的新集合就是一个没有重复元素的集合,具体实现代码如下:
import java.util.ArrayList;
import java.util.List;
/**
*
*/
public class DistinctList1
public static void main(String[] args)
List<Person> list = new ArrayList<>();
list.add(new Person("张起灵", 18));
list.add(new Person("小哥", 20));
list.add(new Person("闷油瓶", 22));
list.add(new Person("小哥", 20));
//去重操作
List<Person> personList = new ArrayList<>(list.size());
list.forEach(p ->
if (!personList.contains(p))
personList.add(p);
);
//打印输出
personList.forEach(System.out::println);
2.方法二
使用迭代器循环并判断当前元素首次出现的位置(indexOf)是否等于最后出现的位置(lastIndexOf),如果不等于则说明此元素为重复元素,删除当前元素即可,这样循环完就能得到一个没有重复元素的集合,实现代码如下:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
*
*/
public class DistinctList2
public static void main(String[] args)
List<Person> list = new ArrayList<>();
list.add(new Person("张起灵", 18));
list.add(new Person("小哥", 20));
list.add(new Person("闷油瓶", 22));
list.add(new Person("小哥", 20));
//去重操作
//获取List集合对应的迭代器
Iterator<Person> iterator = list.iterator();
while (iterator.hasNext())
//获取当前迭代器指针所指向的元素
Person person = iterator.next();
//如果该person在list集合中第一次出现的下标 不等于 最后一次出现的下标,则表明重复
//如果该person在list集合中只出现了一次,那么第一次出现的下标肯定就是最后一次出现的下标了
if (list.indexOf(person) != list.lastIndexOf(person))
iterator.remove();
//打印输出
list.forEach(System.out::println);
3.方法三
Set 集合天生具备去重特性,在创建 Set 集合时可以传递一个 List 集合,这样就能实现数据转移和去重的功能了,具体实现代码如下:
import java.util.*;
/**
*
*/
public class DistinctList3
public static void main(String[] args)
List<Person> list = new ArrayList<>();
list.add(new Person("张起灵", 18));
list.add(new Person("小哥", 20));
list.add(new Person("闷油瓶", 22));
list.add(new Person("小哥", 20));
//去重操作
Set<Person> set = new HashSet<>(list);
// Set<Person> set = new LinkedHashSet<>(list);
//打印输出
set.forEach(System.out::println);
4.方法四
最后一种也是最简单的一种去重方式,我们可以使用 JDK 8 中提供的 Stream 进行去重,Stream 中包含了一个去重方法:distinct,可以直接实现集合的去重功能,最终将去重之后的List集合重新转换为List的Stream流的形式即可,具体实现代码如下:
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
*
*/
public class DistinctList4
public static void main(String[] args)
List<Person> list = new ArrayList<>();
list.add(new Person("张起灵", 18));
list.add(new Person("小哥", 20));
list.add(new Person("闷油瓶", 22));
list.add(new Person("小哥", 20));
//去重操作
list = list.stream().distinct().collect(Collectors.toList());
//打印输出
list.forEach(System.out::println);
以上是关于Java集合相关学习——如何实现List集合的去重操作?的主要内容,如果未能解决你的问题,请参考以下文章
--------------------------------------集合List去重总结------------------------