我想到了两种,一共有两种方法,一个是用的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;
}
还有一种是使用的是 迭代器的写法 两者的性能的比较没有测试过,后者的有一定的局限性