Java8 找出List<String>集合中具体重复的是哪些值

以下是几种找出List集合中具体重复值的方法

1、使用Java8的流式编程和Collectors.groupingBy()方法,将列表分组为具有相同值的子列表,然后查找有多个元素的子列表:

List list = Arrays.asList("apple", "banana", "orange", "banana", "pear", "orange");
Map frequencyMap = list.stream()
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
List 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 list = Arrays.asList("apple", "banana", "orange", "banana", "pear", "orange");
List 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 list = Arrays.asList("apple", "banana", "orange", "banana", "pear", "orange");
Map map = list.stream()
        .collect(Collectors.toMap(Function.identity(), v -> 1, Integer::sum));
List 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 list = Arrays.asList("apple", "banana", "orange", "banana", "pear", "orange");
Set set = new HashSet<>();
List duplicates = list.stream()
        .filter(n -> !set.add(n))
        .collect(Collectors.toList());
System.out.println(duplicates);

你可能感兴趣的:(Java集合,list)