两个list 中相同的对象,去除对象中某个相同的属性

我想到了两种,一共有两种方法,一个是用的map , 还有的是使用的是  迭代器的写法, 都是可以进行抽取的,第一种是不区分对象的类型的,而第二中抽取的方法的局限性很大的,可扩展性不强的


import java.util.*;

/**
 * TODO
 *
 * @author listHashmap [email protected]
 * 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 [email protected]
 * 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;

}

还有一种是使用的是 迭代器的写法  两者的性能的比较没有测试过,后者的有一定的局限性

发布了108 篇原创文章 · 获赞 69 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/weixin_42114097/article/details/86769273