如何在收藏家中实现自己的终结者?

时间:2015-04-14 17:41:53

标签: lambda java-8 collectors

欢迎大家!

我想知道如何实现我自己的终结者,这不是琐事,比如身份功能。 我收藏家的标题是

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

里面有一个修整器方法,可以将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());

1 个答案:

答案 0 :(得分:3)

以下是将List<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>> {...} 

让累加器抓取对象对象的类型T:

@Override
public BiConsumer<List<T>, Pair<T, Double>> accumulator() {
    return (list, p) -> list.add(p.getFirst());
}

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