文章目录
- 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]