欢迎访问宙启技术站
智能推送

使用java函数实现list集合去重的方法。

发布时间:2023-06-04 17:54:46

java中,集合类主要分为List、Set、Queue和Map四大类,其中List是有序的集合,可以放重复的元素。如果需要去重,则需要对List进行操作。本文将介绍使用Java函数实现List集合去重的方法。

先来介绍一个List去重的简单方法,即使用Set集合去重。因为Set是无序的集合,可以保证元素不重复。我们只需要将List中的元素放入Set中,再将Set中元素重新放回List中即可实现去重。

示例代码如下:

List<Integer> list = new ArrayList<>();
//加入重复的元素
list.add(1);
list.add(2);
list.add(3);
list.add(1);
list.add(2);
//定义Set集合
Set<Integer> set = new HashSet<>();
//将List中元素放入Set中去重
set.addAll(list);
//清空List集合
list.clear();
//将Set集合中元素放回List集合中
list.addAll(set);
//打印去重后的List集合
System.out.println(list);

输出结果为:[1, 2, 3]

上述方法简单明了,但需要借助Set集合,可能会占用额外的空间。下面介绍一种不依赖于Set集合实现List去重的方法,即使用Java8的Stream API。

Java8中,List类中新增了stream()方法,可以方便地进行集合操作。我们可以先将List转成Stream类型,然后使用distinct()方法去重,最后使用collect()方法将数据转换成List类型。

示例代码如下:

List<Integer> list = new ArrayList<>();
//加入重复的元素
list.add(1);
list.add(2);
list.add(3);
list.add(1);
list.add(2);
//使用Stream API进行去重
List<Integer> newList = list.stream().distinct().collect(Collectors.toList());
//打印去重后的List集合
System.out.println(newList);

输出结果为:[1, 2, 3]

这种方法虽然简洁,但只能适用于Java8及以上的版本,不支持低版本的Java。

除了以上介绍的方法,还可以使用迭代器进行遍历,利用set集合进行去重,代码如下:

	List<Integer> list = new ArrayList<>();

	// 填充重复数据
	list.add(1);
	list.add(2);
	list.add(3);
	list.add(1);
	list.add(2);

	// 创建set集合
	Set<Integer> setList = new LinkedHashSet<>();

	// 迭代器进行去重
	for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext();) {
		Integer integer = iterator.next();
		if (setList.add(integer)) {
			/*
			 * add方法如果添加成功,则代表不存在,顺便去重 
			 * 上述代码也可以简写成
			 * setList.add(integer)
			 */
		} else {
			iterator.remove();
		}
	}
	System.out.println(list);

输出结果:[1, 2, 3]

两种方法代码都很简洁,使用起来也比较方便。具体采用哪种方法取决于具体的业务场景以及实际需要。需要注意的是,在集合元素较多时,使用Set去重可能会占用较大的内存,会影响程序的运行效率,需要按照实际情况进行选择。