Lambda 如何在收集器中实现我自己的finisher?
欢迎大家 我想知道如何实现我自己的finisher,它不像identity函数那样繁琐。 我的收集器的标题是Lambda 如何在收集器中实现我自己的finisher?,lambda,java-8,collectors,Lambda,Java 8,Collectors,欢迎大家 我想知道如何实现我自己的finisher,它不像identity函数那样繁琐。 我的收集器的标题是 public class SequentialPPSCollector<T> implements Collector<Pair<T, Double>, List<Pair<T, Double>>, List<T>> {...} 以下是如何将列表转换为列表: 因此,您的finisher函数可能如下所示: @
public class SequentialPPSCollector<T> implements
Collector<Pair<T, Double>, List<Pair<T, Double>>, List<T>> {...}
以下是如何将列表转换为列表: 因此,您的finisher函数可能如下所示:
@Override
public Function<List<Pair<T, Double>>, List<T>> finisher() {
return list -> list.stream().map(Pair::getFirst).collect(toList());
}
class SequentialPPSCollector<T> implements Collector<Pair<T, Double>, List<T>, List<T>> {...}
尽管此示例有点简单,因为在这种情况下,您可能会像下面这样声明收集器:
@Override
public Function<List<Pair<T, Double>>, List<T>> finisher() {
return list -> list.stream().map(Pair::getFirst).collect(toList());
}
class SequentialPPSCollector<T> implements Collector<Pair<T, Double>, List<T>, List<T>> {...}
让累加器抓取pair对象的类型T:
@Override
public BiConsumer<List<T>, Pair<T, Double>> accumulator() {
return (list, p) -> list.add(p.getFirst());
}
因此,您的finisher就是identity函数。答案的第一部分应该为您提供一个起点。以下是如何将列表转换为列表: 因此,您的finisher函数可能如下所示:
@Override
public Function<List<Pair<T, Double>>, List<T>> finisher() {
return list -> list.stream().map(Pair::getFirst).collect(toList());
}
class SequentialPPSCollector<T> implements Collector<Pair<T, Double>, List<T>, List<T>> {...}
尽管此示例有点简单,因为在这种情况下,您可能会像下面这样声明收集器:
@Override
public Function<List<Pair<T, Double>>, List<T>> finisher() {
return list -> list.stream().map(Pair::getFirst).collect(toList());
}
class SequentialPPSCollector<T> implements Collector<Pair<T, Double>, List<T>, List<T>> {...}
让累加器抓取pair对象的类型T:
@Override
public BiConsumer<List<T>, Pair<T, Double>> accumulator() {
return (list, p) -> list.add(p.getFirst());
}
因此,您的finisher就是identity函数。答案的第一部分应该给你一个起点。小写字母L看起来就像一个,因此它不应该被用作变量名…哦,不,现在我觉得在道德上有义务理解finisher方法到底应该做什么,以决定答案是否正确:但我没有发现更多的理由抱怨,+1是的,但它不能正常工作,因为是getFirst,但我给了+1。@SzymonRoziewski什么不能正常工作?我假设您的Pair类有一个getFirst方法,该方法返回当前Pair实例的类型T hold值。@SzymonRoziewski我猜不出该方法的名称:-小写L看起来很像一个,因此不应将其用作变量名…哦,不,现在我觉得在道德上有义务去理解一个finisher方法到底应该做什么,以决定答案是否正确:但我没有找到进一步的理由去抱怨,+1是的,但它不能正常工作,因为是getFirst,我给了+1。@SzymonRoziewski什么不能正常工作?我假设您的Pair类有一个getFirst方法,该方法返回当前Pair实例的T hold类型值。@SzymonRoziewski我猜不出该方法的名称:-