1

ようこそ!

ID機能のように自明ではない独自のフィニッシャーを実装する方法を考えています。私のコレクターのヘッダーは

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());
4

1 に答える 1

4

List<Pair<T, Double>>aを に変換する方法は次の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());
}

あなたのフィニッシャーは単なるアイデンティティ機能です。ただし、答えの最初の部分は出発点になるはずです。

于 2015-04-14T17:59:13.127 に答える