📜  Java中的收集器 collectAndThen() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:32:00.703000             🧑  作者: Mango

Java中的收集器 collectAndThen() 方法

Java中的collectAndThen()方法是一个串行流最终收集器(terminal collector),它将一个流中的所有元素整合到一个集合中,并且执行一个操作。该方法接受两个参数,一个是用来进行收集的收集器,另一个是需要执行的操作。

在执行collectAndThen()方法时,首先将流中的元素使用指定的收集器collect()进行收集,然后将得到的结果交给一个Function函数,用来执行特定的操作,并返回结果。

public static <T, A, R, RR> Collector<T, A, RR> 
    collectAndThen(Collector<T, A, R> downstream, 
                   Function<R, RR> finisher)

参数说明:

  • downstream: 需要将流中的元素收集到一个集合中,该参数为收集器。
  • finisher: 对收集到的结果进行转化的函数。

返回值: 一个串行流最终收集器(terminal collector)。

用法示例

下面介绍一个用法示例,假设有一个字符串列表,我们要将其转换为某个对象的列表,并统计数量。

模型类

首先,定义一个模型类User,包含两个属性,一个是name,另一个是age

public class User {

    private String name;
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // getter and setter
    // toString()
}
数据准备

接下来,准备一份字符串列表,每个字符串由用户的名字和年龄组成,中间用逗号分隔。

List<String> userList = Arrays.asList("Tom,20", "Jerry,25", "Lucy,30");
转换和统计数量

使用collectAndThen()方法和Streammap()方法,将字符串转换为对应的User对象,并统计数量。

int count = userList.stream()
        .map(s -> {
            String[] strArr = s.split(",");
            return new User(strArr[0], Integer.parseInt(strArr[1]));
        })
        .collect(Collectors.collectingAndThen(Collectors.toList(), List::size));
System.out.println(count);

输出结果为:

3

我们可以看到,collectAndThen()方法将List<User>转化为了int类型的计数,返回了统计数量。

总结

collectAndThen()方法是Java 8提供的一个非常方便的串行流收集器,可以快速将流中的元素转换成其他类型的对象,同时进行特定的操作。使用collectAndThen()方法,可以方便地进行统计和计数等操作。