Java8如何在list集合去重后顺序不变
时间: 2024-09-14 10:04:23 浏览: 32
在Java 8中,可以使用`Collectors.toCollection()`配合`LinkedHashSet`来实现在List集合中去重并保持原有的顺序。`LinkedHashSet`是一个有序的哈希集,它不允许有重复元素,所以非常适合这种需求。以下是一个示例:
```java
import java.util.*;
import java.util.stream.Collectors;
List<String> listWithDuplicates = Arrays.asList("a", "b", "c", "d", "a", "e", "c");
List<String> deduplicatedList = listWithDuplicates.stream()
.distinct() // 去重
.collect(Collectors.toCollection(LinkedList::new)); // 保持顺序
System.out.println(deduplicatedList); // 输出:[a, b, c, d, e]
```
在这个例子中,我们首先创建了一个流(stream),然后通过`.distinct()`去除重复项,最后使用`Collectors.toCollection(LinkedList::new)`将结果收集到一个新的LinkedList中,这样就实现了去重后的列表仍然按照原来顺序排列。
相关问题
java 两个集合去重
可以使用Set来实现两个集合的去重:
```
Set<Integer> set1 = new HashSet<>(list1);
Set<Integer> set2 = new HashSet<>(list2);
set1.addAll(set2);
List<Integer> result = new ArrayList<>(set1);
```
这段代码先将两个列表转换为Set,然后将它们合并为一个Set,最后将结果转换为List。这样可以保证去重后的元素顺序不变。
JAVA代码实现 两个List<String>类型合并,第一个列表顺序不变的条件下删除第一个列表中的重复元素,将第二个List<String>列表直接添加到去重后的第一个列表的后面
可以使用以下代码实现:
```java
List<String> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
// 假设已经初始化并填充了 list1 和 list2
// 去重并合并
Set<String> set = new HashSet<>(list1);
list1.clear();
list1.addAll(set);
list1.addAll(list2);
```
解释一下代码:
1. 首先创建两个空的列表 `list1` 和 `list2`,并假设已经初始化并填充了它们。
2. 创建一个 `Set` 集合,利用其去重的特性,将 `list1` 中的重复元素删除,并保存到 `set` 中。
3. 清空 `list1`,并将去重后的元素重新添加到 `list1` 中。
4. 最后将 `list2` 直接添加到 `list1` 的后面。
注意:这个方法会改变原始的 `list1`,如果需要保留原始的 `list1`,可以先复制一份再进行操作。
阅读全文