项目中难免会遇到一个list对象中存在相同的数据,但是我们怎么去找出相同的数据呢?
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);
}
}
执行后输出最终结果:
使用方法一,相同数据:张2
使用方法二,相同对象:[{ "stuName":"张2"}]
使用方法二,相同数据:[张2]