Stream practice (4): How to retain repeated elements in the stream? (basic type object)

introduce

We are already very familiar with the fact that distinct() can be used to remove duplicate elements in the Stream stream.

        Integer[] integers = new Integer[] {
    
     1, 2, 1, 3, 4, 4 };
        List<Integer> distinctSort = Arrays.stream(integers).distinct().collect(Collectors.toList());
        System.out.println(distinctSort); // 去重结果:[1, 2, 3, 4]

So think about it in reverse, how to retain repeated elements?
For example: { 1, 2, 1, 3, 4, 4 }
Output result: [1,4]

Basic type array retains duplicate elements

    //基本类型  list找到所有重复的int
    //利用set不可重复性保留
        Integer[] numbers = new Integer[] {
    
     1, 2, 1, 3, 4, 4 };
        Set<Integer> allItems = new HashSet<>();
        Set<Integer> duplicates = Arrays.stream(numbers)
                .filter(n -> !allItems.add(n)) //Set.add() 返回fasle 如果set已经存在元素
                .collect(Collectors.toSet());
        System.out.println(duplicates);

Object array retains duplicate elements

There is a computer object, and it is necessary to retain computer objects with the same osName in the list array.

class Computer{
    
    

	int id;

	String osName;
}
        Computer c1 = new Computer(1, "Window10");

        Computer c2 = new Computer(2, "Linux");

        Computer c3 = new Computer(3, "MacOs");

        Computer c4 = new Computer(4, "Window10");

        Computer c5 = new Computer(5, "Window10");

        List<Computer> list = new ArrayList<>();
        list.add(c1);
        list.add(c2);
        list.add(c3);
        list.add(c4);
        list.add(c5);

     
        //对象类型   找到所有value重复的list
        //基本思路:groupingBy分组,然后找到分组中个数大于1的value
        List<Computer> collect = list.stream().collect(Collectors.groupingBy(Computer::getOsName))
                .entrySet().stream().filter(e -> e.getValue().size() > 1)
                .flatMap(e -> e.getValue().stream()).collect(Collectors.toList());
        System.out.println(collect);

Guess you like

Origin blog.csdn.net/qq_44716086/article/details/129790712