使用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去重可能会占用较大的内存,会影响程序的运行效率,需要按照实际情况进行选择。
