本次展示一个小示例
首先这是集合中的元素 User类
user有三个属性
public class User {
private int id;
private String name;
private String age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age='" + age + '\'' +
'}';
}
public User(int id, String name, String age){
this.id = id;
this.name = name;
this.age = age;
}
创建元素内容是User的两个集合
List<User> a = new ArrayList<>();
a.add(new User(1,"zhangsan","23"));
a.add(new User(2,"lisi","28"));
a.add(new User(3,"wangwu","44"));
List<User> b = new ArrayList<>();
b.add(new User(2,"lisi","28"));
b.add(new User(3,"wangwu","44"));
可以看到 集合a包含集合b
或者说是元素的一个或多个属性值相等
现在要把集合a中不属于集合b的元素收集起来
List<User> collect = a.stream().filter(o -> {
for (User user : b) {
if (o.getAge().equals(user.getAge()) && o.getName().equals(user.getName()))
{
return false;
}
}
return true;
}).collect(Collectors.toList());
然后打印出结果
collect.forEach(System.out::println);
结果是我们预想的结果
这段代码其实是java流中filter操作的反向操作
本例比较简单,在特定的需求中也是可以用到的