以下是几种找出List<String>集合中具体重复值的方法
1、使用Java8的流式编程和Collectors.groupingBy()方法,将列表分组为具有相同值的子列表,然后查找有多个元素的子列表:
List<String> list = Arrays.asList("apple", "banana", "orange", "banana", "pear", "orange");
Map<String, Long> frequencyMap = list.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
List<String> duplicates = frequencyMap.entrySet().stream()
.filter(entry -> entry.getValue() > 1)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
System.out.println(duplicates);
2、使用Java8的流式编程和Collectors.toSet()方法,将重复的元素筛选出来
List<String> list = Arrays.asList("apple", "banana", "orange", "banana", "pear", "orange");
List<String> duplicates = list.stream()
.filter(n -> Collections.frequency(list, n) > 1)
.collect(Collectors.toSet())
.stream()
.collect(Collectors.toList());
System.out.println(duplicates);
3、使用Java8的流式编程和Collectors.toMap()方法,将元素作为键,重复次数作为值,然后查找值大于1的元素
List<String> list = Arrays.asList("apple", "banana", "orange", "banana", "pear", "orange");
Map<String, Integer> map = list.stream()
.collect(Collectors.toMap(Function.identity(), v -> 1, Integer::sum));
List<String> duplicates = map.entrySet().stream()
.filter(entry -> entry.getValue() > 1)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
System.out.println(duplicates);
4、使用Java8的流式编程和Collectors.toSet()方法,将列表中的所有元素添加到另一个集合中,并检查哪些元素已经存在
List<String> list = Arrays.asList("apple", "banana", "orange", "banana", "pear", "orange");
Set<String> set = new HashSet<>();
List<String> duplicates = list.stream()
.filter(n -> !set.add(n))
.collect(Collectors.toList());
System.out.println(duplicates);