📅  最后修改于: 2023-12-03 15:32:00.703000             🧑  作者: Mango
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)
参数说明:
返回值: 一个串行流最终收集器(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()
方法和Stream
的map()
方法,将字符串转换为对应的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()
方法,可以方便地进行统计和计数等操作。