需求:
我们有一个对象集合,我们需要筛除那些某个字段一致的对象。这里演示去掉名字重复的对象
pojo:
package lambda;
/**
* @author sayyes
* @version 1.0
* @description
* @date 2022/7/29 09:32:15
*/
public class User {
private String name;
private String address;
private Integer age;
public User() {
}
public User(String name, String address, Integer age) {
this.name = name;
this.address = address;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
", age=" + age +
'}';
}
}
package lambda;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author sayyes
* @version 1.0
* @description
* @date 2022/9/29 17:21:14
*/
public class TestUserLambda {
public static void main(String[] args) {
User user = new User("zhangsan", "asad", 10);
User user1 = new User("zhangsan1", "asad", 10);
User user2 = new User("zhangsan1", "asad", 10);
User user3 = new User("zhangsan3", "asad", 10);
User user4 = new User("zhangsan4", "asad", 10);
User user5 = new User("zhangsan5", "asad", 10);
ArrayList<User> list = new ArrayList<>();
list.add(user);
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
list.add(user5);
List<User> collect = list.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(User::getName))), ArrayList::new));
System.out.println(collect);
}
}
输出结果:
方法介绍:
Collectors.collectingAndThen() 函数应该最像 map and reduce 了,它可接受两个参数,第一个参数用于 reduce操作,而第二参数用于 map操作。
也就是,先把流中的所有元素传递给第一个参数,然后把生成的集合传递给第二个参数来处理。