在开发中遇到list需要过滤重复的数据,以前都是使用的的是双重循环的方法,感觉这种方法如果数据量太大就会大大影响效率,今天从网上找了一个方法,是采用jdk1.8的特性,理论的东西了解不是太多,直接上demo吧
people实体类和student实体类
class People {
private String id;
private String somethingElse;
public People() {
}
public People(String id, String somethingElse) {
this.id = id;
this.somethingElse = somethingElse;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSomethingElse() {
return somethingElse;
}
public void setSomethingElse(String somethingElse) {
this.somethingElse = somethingElse;
}
@Override
public String toString() {
return "People{" +
"id='" + id + '\'' +
", somethingElse='" + somethingElse + '\'' +
'}';
}
}
class Student {
private String id;
private String idCard;
private String somethingElse;
public Student() {
}
public Student(String id, String idCard, String somethingElse) {
this.id = id;
this.idCard = idCard;
this.somethingElse = somethingElse;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getSomethingElse() {
return somethingElse;
}
public void setSomethingElse(String somethingElse) {
this.somethingElse = somethingElse;
}
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", idCard='" + idCard + '\'' +
", somethingElse='" + somethingElse + '\'' +
'}';
}
}
下面是测试代码
public class ListTest {
private List<Student> studentList;
private List<People> peopleList;
@Before
public void setUp() {
//初始化数据
studentList = Lists.newArrayList(
new Student("1", "11", "111"),
new Student("2", "22", "222"),
new Student("3", "33", "333")
);
peopleList = Lists.newArrayList(
new People("11", "111"),
new People("222", "222"),
new People("33", "333")
);
}
@Test
public void compareList() {
//获取相同字段内容,转化为set
Set<String> ids = peopleList
.stream()
.map(People::getId)
.collect(Collectors.toSet());
//过滤重复内容
List<Student> result = studentList
.stream()
.filter(e -> ids.contains(e.getIdCard()))
.collect(Collectors.toList());
System.out.println(result);
}
}
代码比较简单,在这记录一下,以便以后用到时查找,如果大家有更好的方法,欢迎一起讨论,如有错误,还请指正。
参考文章: https://blog.csdn.net/u011277123/article/details/78257400