Query the duplicate data in the List

The project will inevitably encounter the same data in a list object, but how do we find the same data?


import com.alibaba.fastjson.JSON;
import com.king.science.dto.Student;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author xf
 * @version 1.0.0
 * @ClassName ListTest
 * @Description TODO list查询重复数据
 * @createTime 2020.09.10 10:03
 */
public class ListTest {
    
    


    public static void main(String[] args) {
    
    

        //创建一个list用来测试
        List<Student> testList = new ArrayList<Student>();
        Student student = new Student();
        Student student2 = new Student();
        Student student3 = new Student();
        student.setStuName("张二");
        student2.setStuName("张2");
        student3.setStuName("张2");
        testList.add(student);
        testList.add(student2);
        testList.add(student3);

        List<Student> repeatList = new ArrayList<Student>();//用于存放重复的元素的list

        // 第一种方法:两个循环
            for (int i = 0; i < testList.size() - 1; i++) {
    
    
                for (int j = testList.size() - 1; j > i; j--) {
    
    
                    if (testList.get(j).getStuName().equals(testList.get(i).getStuName())) {
    
    
                        repeatList.add(testList.get(j));//把相同元素加入list(找出相同的)
                        testList.remove(j);//删除重复元素
                    }
                }
            }
		for(Student s : repeatList){
    
    
			System.out.println("使用方法一,相同数据:" + s.getStuName());
		}


        //第二种方法:利用map.containsKey()
        Map<String, Integer> map = new HashMap<>();
        for (Student s : testList) {
    
    
            //1:map.containsKey()   检测key是否重复
            if (map.containsKey(s.getStuName())) {
    
    
                Student student1 = new Student();
                student1.setStuName(s.getStuName());
                repeatList.add(student1);//获取重复的学生名称并存放到新的list中
                Integer num = map.get(s.getStuName());
                map.put(s.getStuName(), num + 1);
            } else {
    
    
                map.put(s.getStuName(), 1);

            }
        }

  	    System.out.println("使用方法二,相同对象:"+JSON.toJSONString(repeatList));
        //提取出list对象中某个字段的所有值
        List<String> names = repeatList.stream().map(p -> p.getStuName()).collect(Collectors.toList());
        System.out.println("使用方法二,相同数据:"+names);



    }

}

Output the final result after execution:

使用方法一,相同数据:2
使用方法二,相同对象:[{
    
    "stuName":"张2"}]
使用方法二,相同数据:[2]

Guess you like

Origin blog.csdn.net/weixin_44146379/article/details/108508698