利用{List} .stream方法进行字段去重,提取
操作环境
创建实体类 User
> @Data
public class User implements Serializable {
private id;
private name;
private year;
private order;
}
使用.stream方法
假设 根据year去重
List<User> vos = (搜索方法搜索出的数据);
List<User> collect = vos.stream().collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(User::getYear))),ArrayList::new));
collect 就是根据year去重后的List
提取year
List<String> years;
years = collect.stream().map(User::getYear).collect(Collectors.toList());
根据year不同的值进行分组
1.流创建:vos.stream() 将 vos 集合转换为一个流(Stream)。流是 Java 8 引入的一个关键抽象,它允许你以声明性方式处理数据集合(包括数组、集合等)。
2.过滤:.filter(item -> item.getYear() == 1) 通过 filter 方法对流中的元素进行过滤。这里使用了一个 lambda 表达式 item -> item.getYear() == 1 作为过滤条件,它表示只保留那些 getYear() 方法返回值为 1 的元素。
3.排序:.sorted(Comparator.comparing(User::getOrder)) 对过滤后的流进行排序。这里使用了 Comparator.comparing 方法来生成一个比较器,该比较器根据 User 类的 getOrder() 方法的返回值来对流中的元素进行排序。这意味着流中的元素将按照它们的 order 属性值进行排序。
4.收集:.collect(Collectors.toList()) 将排序后的流元素收集到一个新的 List<User> 列表中。Collectors.toList() 是一个收集器(Collector),它告诉 collect 方法如何收集流中的元素。
List<User> collect1 = vos.stream().filter(item -> item.getYear() == 1 ).sorted(Comparator.comparing(User::getOrder)).collect(Collectors.toList());
List<User> collect2 = vos.stream().filter(item -> item.getYear() == 2 ).sorted(Comparator.comparing(User::getOrder)).collect(Collectors.toList());