文章目录
- list删除重复元素几种思路
- hashset
- Stream流
- 删除所有重复元素
list删除重复元素几种思路
hashset
List<String> list2 = new ArrayList<>();
list2.add("a");
list2.add("b");
list2.add("a");
Set<String> set = new HashSet<>(list2);
for (String item : set) {
log.info("[{}]",item);
}
23:29:46.093 [main] INFO com.geekmice.sbeasypoi.service.impl.ds - [a]
23:29:46.105 [main] INFO com.geekmice.sbeasypoi.service.impl.ds - [b]
Stream流
distinct()是Java 8 中 Stream 提供的方法,返回的是由该流中不同元素组成的流。distinct()使用 hashCode() 和 eqauls() 方法来获取不同的元素。
因此,需要去重的类必须实现 hashCode() 和 equals() 方法。换句话讲,我们可以通过重写定制的 hashCode() 和 equals() 方法来达到某些特殊需求的去重。
List<String> list2 = new ArrayList<>();
list2.add("a");
list2.add("b");
list2.add("a");
list2=list2.stream().distinct().collect(Collectors.toList());
for (String item : list2) {
log.info("元素:[{}]",item);
}
23:31:49.434 [main] INFO com.geekmice.sbeasypoi.service.impl.ds - 元素:[a]
23:31:49.444 [main] INFO com.geekmice.sbeasypoi.service.impl.ds - 元素:[b]
删除所有重复元素
思想:其实就是获取非重复元素,将所有元素划分为重复元素和正常元素,用两个标志位说明,1表示正常元素,超过1
的都是累加出来,
List<String> list2 = new ArrayList<>();
list2.add("a");
list2.add("b");
list2.add("a");
Map<String, Integer> cachedMap = new HashMap<>(16);
for (String item : list2) {
Integer count = cachedMap.get(item);
cachedMap.put(item, Objects.isNull(count) ? 0 : count + 1);
}
List<String> cachedList = new ArrayList(16);
for (Map.Entry<String, Integer> integerEntry : cachedMap.entrySet()) {
if (integerEntry.getValue() != 1) {
cachedList.add(integerEntry.getKey());
}
}
for (String content : cachedList) {
log.info("非重复:[{}]", content);
}
23:38:59.454 [main] INFO com.geekmice.sbeasypoi.service.impl.ds - 非重复:[b]