1

欢迎人们!

我想知道如何实现我自己的完成器,这不是琐碎的,比如身份函数。我的收藏家的标题是

public class SequentialPPSCollector<T> implements
    Collector<Pair<T, Double>, List<Pair<T, Double>>, List<T>> {...}

里面有一个finisher方法应该转换List<Pair<T, Double>>List<T>

@Override
public Function<List<Pair<T, Double>>, List<T>> finisher() {
    return ...
}

这可以完成工作

return list -> list
       .stream()
       .map(Pair::getLeft)
       .collect(Collectors.toList());
4

1 回答 1

4

以下是如何将 aList<Pair<T, Double>>转换为List<T>

List<T> listOfT = list.stream()
                      .map(Pair::getFirst)
                      .collect(Collectors.toList());

因此,您的整理器功能可能如下所示:

@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());
}

这样你的终结者就是简单的身份函数。答案的第一部分应该给你一个起点。

于 2015-04-14T17:59:13.127 回答