Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lambda 如何在收集器中实现我自己的finisher?_Lambda_Java 8_Collectors - Fatal编程技术网

Lambda 如何在收集器中实现我自己的finisher?

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函数可能如下所示: @

欢迎大家

我想知道如何实现我自己的finisher,它不像identity函数那样繁琐。 我的收集器的标题是

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我猜不出该方法的名称:-