扫码关注官方订阅号
光阴似箭催人老,日月如移越少年。
可以参考:
public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("string1"); list.add("string1"); list.add("string1"); list.add("string1"); list.add("string3"); list.add("string2"); list.add("string2"); HashMap<String, Integer> hashMap = new HashMap<String, Integer>(); for (String string : list) { if (hashMap.get(string) != null) { Integer value = hashMap.get(string); hashMap.put(string, value+1); System.out.println("the element:"+string+" is repeat"); } else { hashMap.put(string, 1); } } }
如果你用上了 Java8,使用 Stream 来实现这个功能会很优雅:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static <E> List<E> getDuplicateElements(List<E> list) { return list.stream() // list 对应的 Stream .collect(Collectors.toMap(e -> e, e -> 1, (a, b) -> a + b)) // 获得元素出现频率的 Map,键为元素,值为元素出现的次数 .entrySet().stream() // 所有 entry 对应的 Stream .filter(entry -> entry.getValue() > 1) // 过滤出元素出现次数大于 1 的 entry .map(entry -> entry.getKey()) // 获得 entry 的键(重复元素)对应的 Stream .collect(Collectors.toList()); // 转化为 List } public static void main(String[] args) throws Exception { List<String> list = Arrays.asList("a", "b", "c", "d", "a", "a", "d", "d"); List<String> duplicateElements = getDuplicateElements(list); System.out.println("list 中重复的元素:" + duplicateElements); } }
运行结果:
List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); list.add("ddd"); list.add("aaa"); list.add("aaaa"); list.add("eee"); list.add("bbb"); list.add("ccc"); StringBuilder builder = new StringBuilder(); for(String str : list) { // 如果不存在返回 -1。 if(builder.indexOf(","+str+",") > -1) { System.out.println("重复的有:"+str); } else { builder.append(",").append(str).append(","); } }
优雅的话当然是Java8的新特性了
List<String> words = Arrays.asList("a", "b", "c", "d", "a", "d"); List<String> results = new ArrayList<>(); for (Multiset.Entry<String> entry : HashMultiset.create(words).entrySet()) { if (entry.getCount() > 1) { results.add(entry.getElement()); } } System.out.println(results);
List<String> words = Arrays.asList("a", "b", "c", "d", "a", "d"); List<String> results = HashMultiset.create(words).entrySet().stream() .filter(w -> w.getCount() > 1) .map(Multiset.Entry::getElement) .collect(Collectors.toList()); System.out.println(results);
List<String> words = Arrays.asList("a", "b", "c", "d", "a", "d"); Set<String> repeated = new HashSet<>(); List<String> results = new ArrayList<>(); for (String word : words) { if (!repeated.add(word)) { results.add(word); } } System.out.println(results);
优不优雅,只是别人封装罢了。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
可以参考:
如果你用上了 Java8,使用 Stream 来实现这个功能会很优雅:
运行结果:

优雅的话当然是Java8的新特性了
用 Guava 可以这样写
With Lambda
不使用 Guava
优不优雅,只是别人封装罢了。