两个list 中相同的对象,去除对象中某个相同的属性 Myth丶恋晨 2022-04-23 09:36 352阅读 0赞 我想到了两种,一共有两种方法,一个是用的map , 还有的是使用的是 迭代器的写法, 都是可以进行抽取的,第一种是不区分对象的类型的,而第二中抽取的方法的局限性很大的,可扩展性不强的 import java.util.*; /** * TODO * * @author listHashmap 1063847690@qq.com * TODO :说明 对于两个相同的list对象的当名称相同的对象最终只有加入到listA 中 * @Classname listHashmap * @Description * @Date 2019/2/6 0006 19:59 * @Created by xumingguan */ public class listHashmap { public static void main(String[] args) { ArrayList<Student> studentListA = new ArrayList<Student>(); ArrayList<Student> studentListB = new ArrayList<Student>(); Student student1 = new Student(1, "tom", "11"); Student student2 = new Student(2, "tom1", "12"); Student student3 = new Student(3, "tom2", "13"); Student student4 = new Student(4, "tom3", "14"); Student student5 = new Student(5, "tom4", "15"); Student student6 = new Student(6, "tom5", "16"); Student student7 = new Student(7, "tom", "17"); // listA 进行加入student的对象 studentListA.add(student1); studentListA.add(student2); studentListA.add(student3); // listB 加入Student对象 studentListB.add(student4); studentListB.add(student5); studentListB.add(student6); studentListB.add(student7); // 这会已经注意到了 student7已经加入到了listB 中了 student7的id与student1的id是不相同的但是name是一样的 // 使用hashmap 进行去重的问题 HashMap<String, Student> StudentMap = new HashMap<String, Student>(); for (Student student : studentListA) { StudentMap.put(student.getName(), student); } for (Student student : studentListB) { // 如果listB 中的名称不相同的加入到listA 中的 如果有顺序的安排的可以对hashmap 改为LinkedHashMap 这样的插入是有序的加入的 if (!StudentMap.containsKey(student.getName())) { StudentMap.put(student.getName(), student); } } // 对这个map进行遍历 Iterator<Map.Entry<String, Student>> iterator = StudentMap.entrySet().iterator(); ArrayList<Student> studentsmap = new ArrayList<Student>(); // 对 iterator 进行遍历 while (iterator.hasNext()){ Map.Entry<String, Student> next = iterator.next(); Student value = next.getValue(); studentsmap.add( value); } } } // 这个是Student 的类 import lombok.*; /** * TODO * * @author Student 1063847690@qq.com * TODO :说明 * @Classname Student * @Description * @Date 2019/2/6 0006 20:01 * @Created by xumingguan */ @Getter @Setter @ToString @NoArgsConstructor @AllArgsConstructor public class Student { private Integer id; private String name; private String age; } 还有一种是使用的是 迭代器的写法 两者的性能的比较没有测试过,后者的有一定的局限性
还没有评论,来说两句吧...