public final class Collectors
extends Object
Collector
の実装。 次のコードは予め用意されたコレクタを使ってよくある可変簡約作業をする例である。
// 名前をListに累積する
List<String> list = people.stream().map(Person::getName).collect(Collectors.toList());
// 名前をTreeSetに累積する
Set<String> set = people.stream().map(Person::getName).collect(Collectors.toCollection(TreeSet::new));
// 要素を文字列に変換し、カンマで区切って連結する
String joined = things.stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
// 従業員の給与の和を求める
int total = employees.stream()
.collect(Collectors.summingInt(Employee::getSalary)));
// 部署ごとに従業員をグループ化する
Map<Department, List<Employee>> byDept
= employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment));
// 部署ごとに給与の合計を求める
Map<Department, Integer> totalByDept
= employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment,
Collectors.summingInt(Employee::getSalary)));
// 学生を合格者と不合格者に分ける
Map<Boolean, List<Student>> passingFailing =
students.stream()
.collect(Collectors.partitioningBy(s -> s.getGrade() >= PASS_THRESHOLD));
修飾子とタイプ | メソッドと説明 |
---|---|
static <T> Collector<T,?,Double> |
averagingDouble(ToDoubleFunction<? super T> mapper)
double値を返す関数を入力要素に適用した結果の算術平均を返す
Collector を返す。 |
static <T> Collector<T,?,Double> |
averagingInt(ToIntFunction<? super T> mapper)
int値を返す関数を入力要素に適用した結果の算術平均を返す
Collector を返す。 |
static <T> Collector<T,?,Double> |
averagingLong(ToLongFunction<? super T> mapper)
long値を返す関数を入力要素に適用した結果の算術平均を返す
Collector を返す。 |
static <T,A,R,RR> Collector<T,A,RR> |
collectingAndThen(Collector<T,A,R> downstream,
Function<R,RR> finisher)
Collector に対して追加の仕上げ処理をするように適合させる。 |
static <T> Collector<T,?,Long> |
counting()
T 型の要素を受け入れ、l入力要素数を数えるCollector を返す。 |
static <T,K> Collector<T,?,Map<K,List<T>>> |
groupingBy(Function<? super T,? extends K> classifier)
T 型である入力要素に対する"group by"処理を実装するCollector を返す。 |
static <T,K,A,D> Collector<T,?,Map<K,D>> |
groupingBy(Function<? super T,? extends K> classifier,
Collector<? super T,A,D> downstream)
T 型である入力要素に対するカスケードされた"group by"処理を実装するCollector を返す。 |
static <T,K,D,A,M extends Map<K,D>> |
groupingBy(Function<? super T,? extends K> classifier,
Supplier<M> mapFactory,
Collector<? super T,A,D> downstream)
T 型である入力要素に対するカスケードされた"group by"処理を実装するCollector を返す。 |
static <T,K> Collector<T,?,ConcurrentMap<K,List<T>>> |
groupingByConcurrent(Function<? super T,? extends K> classifier)
T 型である入力要素に対する"group by"処理を実装する並行Collector を返す。 |
static <T,K,A,D> Collector<T,?,ConcurrentMap<K,D>> |
groupingByConcurrent(Function<? super T,? extends K> classifier,
Collector<? super T,A,D> downstream)
T 型である入力要素に対するカスケードされた"group by"処理を実装する並行Collector を返す。 |
static <T,K,A,D,M extends ConcurrentMap<K,D>> |
groupingByConcurrent(Function<? super T,? extends K> classifier,
Supplier<M> mapFactory,
Collector<? super T,A,D> downstream)
T 型である入力要素に対するカスケードされた"group by"処理を実装する並行Collector を返す。 |
static Collector<CharSequence,?,String> |
joining()
入力要素を出現順に
String に連結するCollector を返す。 |
static Collector<CharSequence,?,String> |
joining(CharSequence delimiter)
入力要素を出現順に指定された文字列で区切って
String に連結するCollector を返す。 |
static Collector<CharSequence,?,String> |
joining(CharSequence delimiter,
CharSequence prefix,
CharSequence suffix)
入力要素を出現順に指定された文字列で区切って連結し、指定された接頭辞および接尾辞を付与する
Collector を返す。 |
static <T,U,A,R> Collector<T,?,R> |
mapping(Function<? super T,? extends U> mapper,
Collector<? super U,A,R> downstream)
Collector の各入力要素に対して累積前に写像関数を適用して、U 型を受けとるCollector をT 型を受けとるCollector へと適合させる。 |
static <T> Collector<T,?,Optional<T>> |
maxBy(Comparator<? super T> comparator)
与えられた
Comparator に従って最大の要素を表すOptional<T> を生成するCollector<T, T> を返す。 |
static <T> Collector<T,?,Optional<T>> |
minBy(Comparator<? super T> comparator)
与えられた
Comparator に従って最小の要素を表すOptional<T> を生成するCollector<T, T> を返す。 |
static <T> Collector<T,?,Map<Boolean,List<T>>> |
partitioningBy(Predicate<? super T> predicate)
入力要素を
Predicate に従って分割してMap<Boolean, List<T>> に編成するCollector を返す。 |
static <T,D,A> Collector<T,?,Map<Boolean,D>> |
partitioningBy(Predicate<? super T> predicate,
Collector<? super T,A,D> downstream)
入力要素を
Predicate に従って分割した後に他のCollector を使って各パーティションの値を簡約して、簡約結果を値とするMap<Boolean, D> に編成するCollector を返す。 |
static <T> Collector<T,?,Optional<T>> |
reducing(BinaryOperator<T> op)
指定された
BinaryOperator に基づいて入力要素の簡約を実行するCollector を返す。 |
static <T> Collector<T,?,T> |
reducing(T identity,
BinaryOperator<T> op)
与えられた単位元を使い、指定された
BinaryOperator に基いて入力要素の簡約を実行するCollector を返す。 |
static <T,U> Collector<T,?,U> |
reducing(U identity,
Function<? super T,? extends U> mapper,
BinaryOperator<U> op)
指定された写像関数と
BinaryOperator に基いて入力要素の簡約を実行するCollector を返す。 |
static <T> Collector<T,?,DoubleSummaryStatistics> |
summarizingDouble(ToDoubleFunction<? super T> mapper)
各入力要素に
double を返す関数を適用し、結果の値に対する要約統計量を返すCollector を返す。 |
static <T> Collector<T,?,IntSummaryStatistics> |
summarizingInt(ToIntFunction<? super T> mapper)
各入力要素に
int を返す関数を適用し、結果の値に対する要約統計量を返すCollector を返す。 |
static <T> Collector<T,?,LongSummaryStatistics> |
summarizingLong(ToLongFunction<? super T> mapper)
各入力要素に
long を返す関数を適用し、結果の値に対する要約統計量を返すCollector を返す。 |
static <T> Collector<T,?,Double> |
summingDouble(ToDoubleFunction<? super T> mapper)
double値を返す関数を入力要素に適用した結果の和を返す
Collector を返す。 |
static <T> Collector<T,?,Integer> |
summingInt(ToIntFunction<? super T> mapper)
int値を返す関数を入力要素に適用した結果の和を返す
Collector を返す。 |
static <T> Collector<T,?,Long> |
summingLong(ToLongFunction<? super T> mapper)
long値を返す関数を入力要素に適用した結果の和を返す
Collector を返す。 |
static <T,C extends Collection<T>> |
toCollection(Supplier<C> collectionFactory)
入力要素を新しい
Collection に出現順に累積するCollector を返す。 |
static <T,K,U> Collector<T,?,ConcurrentMap<K,U>> |
toConcurrentMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper)
写像関数の結果をキーと値として、要素を
ConcurrentMap に累積する並行Collector を返す。 |
static <T,K,U> Collector<T,?,ConcurrentMap<K,U>> |
toConcurrentMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper,
BinaryOperator<U> mergeFunction)
写像関数の結果をキーと値として、要素を
ConcurrentMap に累積する並行Collector を返す。 |
static <T,K,U,M extends ConcurrentMap<K,U>> |
toConcurrentMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper,
BinaryOperator<U> mergeFunction,
Supplier<M> mapSupplier)
写像関数の結果をキーと値として、要素を
ConcurrentMap に累積する並行Collector を返す。 |
static <T> Collector<T,?,List<T>> |
toList()
入力要素を新しい
List に出現順に累積するCollector を返す。 |
static <T,K,U> Collector<T,?,Map<K,U>> |
toMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper)
写像関数の結果をキーと値として、要素を
Map に累積するCollector を返す。 |
static <T,K,U> Collector<T,?,Map<K,U>> |
toMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper,
BinaryOperator<U> mergeFunction)
写像関数の結果をキーと値として、要素を
Map に累積するCollector を返す。 |
static <T,K,U,M extends Map<K,U>> |
toMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper,
BinaryOperator<U> mergeFunction,
Supplier<M> mapSupplier)
写像関数の結果をキーと値として、要素を
Map に累積するCollector を返す。 |
static <T> Collector<T,?,Set<T>> |
toSet()
入力要素を新しい
Set に出現順に累積するCollector を返す。 |
public static <T,C extends Collection<T>> Collector<T,?,C> toCollection(Supplier<C> collectionFactory)
Collection
に出現順に累積するCollector
を返す。Collection
は与えられたファクトリによって作成される。
public static <T> Collector<T,?,List<T>> toList()
List
に出現順に累積するCollector
を返す。返されるList
に対する、型・可変性・直列化可能性・スレッド安全性の保証は無い。もし返されるList
についての制御権が必要であれば、toCollection(Supplier)
を利用せよ。
public static <T> Collector<T,?,Set<T>> toSet()
Set
に出現順に累積するCollector
を返す。返されるSet
に対する、型・可変性・直列化可能性・スレッド安全性の保証は無い。もし返されるList
についての制御権が必要であれば、toCollection(Supplier)
を利用せよ。 これは順序を持たない
Collectorである。
public static Collector<CharSequence,?,String> joining()
String
に連結するCollector
を返す。
public static Collector<CharSequence,?,String> joining(CharSequence delimiter)
String
に連結するCollector
を返す。
public static Collector<CharSequence,?,String> joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
Collector
を返す。
public static <T,U,A,R> Collector<T,?,R> mapping(Function<? super T,? extends U> mapper, Collector<? super U,A,R> downstream)
Collector
の各入力要素に対して累積前に写像関数を適用して、U
型を受けとるCollector
をT
型を受けとるCollector
へと適合させる。
public static <T,A,R,RR> Collector<T,A,RR> collectingAndThen(Collector<T,A,R> downstream, Function<R,RR> finisher)
Collector
に対して追加の仕上げ処理をするように適合させる。例えば次のようにすると、toList()
コレクタが常に不変なリストを作るようにできる。
List<String> people
= people.stream().collect(collectingAndThen(toList(), Collections::unmodifiableList));
public static <T> Collector<T,?,Long> counting()
T
型の要素を受け入れ、l入力要素数を数えるCollector
を返す。要素が無ければ結果は0となる。
public static <T> Collector<T,?,Optional<T>> minBy(Comparator<? super T> comparator)
Comparator
に従って最小の要素を表すOptional<T>
を生成するCollector<T, T>
を返す。
public static <T> Collector<T,?,Optional<T>> maxBy(Comparator<? super T> comparator)
Comparator
に従って最大の要素を表すOptional<T>
を生成するCollector<T, T>
を返す。
public static <T> Collector<T,?,Integer> summingInt(ToIntFunction<? super T> mapper)
Collector
を返す。要素が無ければ結果は0となる。
public static <T> Collector<T,?,Long> summingLong(ToLongFunction<? super T> mapper)
Collector
を返す。要素が無ければ結果は0となる。
public static <T> Collector<T,?,Double> summingDouble(ToDoubleFunction<? super T> mapper)
Collector
を返す。要素が無ければ結果は0となる。 返される和は、桁が異なる値の加算に由来する丸め誤差の累積のため、値が登録される順番によって変化する場合がある。絶対値が小さい順に整列するとより正確な値を出す傾向がある。登録されるいずれかの要素がNaN
であるか、いずれかの時点での和がNaN
である場合、和はNaN
となる。
public static <T> Collector<T,?,Double> averagingInt(ToIntFunction<? super T> mapper)
Collector
を返す。要素が無ければ結果は0となる。
public static <T> Collector<T,?,Double> averagingLong(ToLongFunction<? super T> mapper)
Collector
を返す。要素が無ければ結果は0となる。
public static <T> Collector<T,?,Double> averagingDouble(ToDoubleFunction<? super T> mapper)
Collector
を返す。要素が無ければ結果は0となる。 返される平均値は、桁が異なる値の加算に由来する丸め誤差の累積のため、値が登録される順番によって変化する場合がある。絶対値が小さい順に整列するとより正確な値を出す傾向がある。登録されるいずれかの要素がNaN
であるか、いずれかの時点での和がNaN
である場合、平均値はNaN
となる。
public static <T> Collector<T,?,T> reducing(T identity, BinaryOperator<T> op)
BinaryOperator
に基いて入力要素の簡約を実行するCollector
を返す。
public static <T> Collector<T,?,Optional<T>> reducing(BinaryOperator<T> op)
BinaryOperator
に基づいて入力要素の簡約を実行するCollector
を返す。結果はOptional<T>
によって表される。
public static <T,U> Collector<T,?,U> reducing(U identity, Function<? super T,? extends U> mapper, BinaryOperator<U> op)
BinaryOperator
に基いて入力要素の簡約を実行するCollector
を返す。これはreducing(Object, BinaryOperator)
の一般化であり、簡約の前に要素の変換を許す。
public static <T,K> Collector<T,?,Map<K,List<T>>> groupingBy(Function<? super T,? extends K> classifier)
T
型である入力要素に対する"group by"処理を実装するCollector
を返す。つまり要素を分類関数に従ってグループ化して結果をMap
で返すCollector
を返す。 分類関数は要素をK
型の何らかのキーに写像する。このコレクタは、入力要素に分類関数を適用した結果の値をキーとして持ち、そのキーに分類関数が写像するような入力要素を含むList
を対応する値として持つようなMap<K, List<T>>
を生成する。
返されるMap
やList
オブジェクトに対する、型・可変性・直列化可能性・スレッド安全性の保証は無い。
public static <T,K,A,D> Collector<T,?,Map<K,D>> groupingBy(Function<? super T,? extends K> classifier, Collector<? super T,A,D> downstream)
T
型である入力要素に対するカスケードされた"group by"処理を実装するCollector
を返す。つまり要素を分類関数に従ってグループ化した後に下流のCollector
を使って与えられたキーに対応する値の簡約処理を実行するCollector
を返す。 分類関数は要素をK
型の何らかのキーに写像する。下流のコレクタはT
型の要素を処理し、D
型の結果を返す。結果のコレクタはMap<K, D>
を生成する。
返されるMap
オブジェクトに対する、型・可変性・直列化可能性・スレッド安全性の保証は無い。
例えば、各市における名字の集合を計算するには次のようにする。
Map<City, Set<String>> namesByCity
= people.stream().collect(groupingBy(Person::getCity,
mapping(Person::getLastName, toSet())));
public static <T,K,D,A,M extends Map<K,D>> Collector<T,?,M> groupingBy(Function<? super T,? extends K> classifier, Supplier<M> mapFactory, Collector<? super T,A,D> downstream)
T
型である入力要素に対するカスケードされた"group by"処理を実装するCollector
を返す。つまり要素を分類関数に従ってグループ化した後に下流のCollector
を使って与えられたキーに対応する値の簡約処理を実行するCollector
を返す。Collectorが生成するMap
は与えられたファクトリ関数によって作成される。 分類関数は要素をK
型の何らかのキーに写像する。下流のコレクタはT
型の要素を処理し、D
型の結果を返す。結果のコレクタはMap<K, D>
を生成する。
例えば、各市における名字の整列済み集合を計算するには次のようにする。
Map<City, Set<String>> namesByCity
= people.stream().collect(groupingBy(Person::getCity, TreeMap::new,
mapping(Person::getLastName, toSet())));
public static <T,K> Collector<T,?,ConcurrentMap<K,List<T>>> groupingByConcurrent(Function<? super T,? extends K> classifier)
T
型である入力要素に対する"group by"処理を実装する並行Collector
を返す。つまり要素を分類関数に従ってグループ化するCollector
を返す。 分類関数は要素をK
型の何らかのキーに写像する。このコレクタは、入力要素に分類関数を適用した結果の値をキーとして持ち、そのキーに分類関数が写像するような入力要素を含むList
を対応する値として持つようなConcurrentMap<K, List<T>>
を生成する。
返されるMap
やList
オブジェクトに対する、型・可変性・直列化可能性の保証は無く、返されるList
オブジェクトに対するスレッド安全性の保障はない。
public static <T,K,A,D> Collector<T,?,ConcurrentMap<K,D>> groupingByConcurrent(Function<? super T,? extends K> classifier, Collector<? super T,A,D> downstream)
T
型である入力要素に対するカスケードされた"group by"処理を実装する並行Collector
を返す。つまり要素を分類関数に従ってグループ化した後に下流のCollector
を使って与えられたキーに対応する値の簡約処理を実行するCollector
を返す。 分類関数は要素をK
型の何らかのキーに写像する。下流のコレクタはT
型の要素を処理し、D
型の結果を返す。結果のコレクタはMap<K, D>
を生成する。
例えば、各市における名字の整列済み集合を計算するには次のようにする。
ConcurrentMap<City, Set<String>> namesByCity
= people.stream().collect(groupingByConcurrent(Person::getCity,
mapping(Person::getLastName, toSet())));
public static <T,K,A,D,M extends ConcurrentMap<K,D>> Collector<T,?,M> groupingByConcurrent(Function<? super T,? extends K> classifier, Supplier<M> mapFactory, Collector<? super T,A,D> downstream)
T
型である入力要素に対するカスケードされた"group by"処理を実装する並行Collector
を返す。つまり要素を分類関数に従ってグループ化した後に下流のCollector
を使って与えられたキーに対応する値の簡約処理を実行するCollector
を返す。Collectorが生成するConcurrentMap
は与えられたファクトリ関数によって作成される。 分類関数は要素をK
型の何らかのキーに写像する。下流のコレクタはT
型の要素を処理し、D
型の結果を返す。結果のコレクタはMap<K, D>
を生成する。
例えば、各市における名字の整列済み集合を計算するには次のようにする。
ConcurrentMap<City, Set<String>> namesByCity
= people.stream().collect(groupingBy(Person::getCity, ConcurrentSkipListMap::new,
mapping(Person::getLastName, toSet())));
public static <T> Collector<T,?,Map<Boolean,List<T>>> partitioningBy(Predicate<? super T> predicate)
Predicate
に従って分割してMap<Boolean, List<T>>
に編成するCollector
を返す。返されるMap
オブジェクトに対する、型・可変性・直列化可能性・スレッド安全性の保証は無い。
public static <T,D,A> Collector<T,?,Map<Boolean,D>> partitioningBy(Predicate<? super T> predicate, Collector<? super T,A,D> downstream)
Predicate
に従って分割した後に他のCollector
を使って各パーティションの値を簡約して、簡約結果を値とするMap<Boolean, D>
に編成するCollector
を返す。 返されるMap
オブジェクトに対する、型・可変性・直列化可能性・スレッド安全性の保証は無い。
public static <T,K,U> Collector<T,?,Map<K,U>> toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper)
Map
に累積するCollector
を返す。 もし写像されたキーが(Object.equals(Object)
に従って)重複を含む場合は、収集処理が実行される際にIllegalStateException
が発生する。写像されたキーが重複を含む場合は代わりにtoMap(Function, Function, BinaryOperator)
を使用せよ。
public static <T,K,U> Collector<T,?,Map<K,U>> toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper, BinaryOperator<U> mergeFunction)
Map
に累積するCollector
を返す。 もし写像されたキーが(Object.equals(Object)
に従って)重複を含む場合は、等価な各要素に対して値に写像する関数が適用され、用意された併合関数により結果が併合される。
public static <T,K,U,M extends Map<K,U>> Collector<T,?,M> toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapSupplier)
Map
に累積するCollector
を返す。 もし写像されたキーが(Object.equals(Object)
に従って)重複を含む場合は、等価な各要素に対して値に写像する関数が適用され、用意された併合関数により結果が併合される。Map
は与えられた供給関数によって作成される。
public static <T,K,U> Collector<T,?,ConcurrentMap<K,U>> toConcurrentMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper)
ConcurrentMap
に累積する並行Collector
を返す。 もし写像されたキーが(Object.equals(Object)
に従って)重複を含む場合は、収集処理が実行される際にIllegalStateException
が発生する。写像されたキーが重複を含む場合は代わりにtoConcurrentMap(Function, Function, BinaryOperator)
を使用せよ。
public static <T,K,U> Collector<T,?,ConcurrentMap<K,U>> toConcurrentMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper, BinaryOperator<U> mergeFunction)
ConcurrentMap
に累積する並行Collector
を返す。 もし写像されたキーが(Object.equals(Object)
に従って)重複を含む場合は、等価な各要素に対して値に写像する関数が適用され、用意された併合関数により結果が併合される。
public static <T,K,U,M extends ConcurrentMap<K,U>> Collector<T,?,M> toConcurrentMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapSupplier)
public static <T> Collector<T,?,IntSummaryStatistics> summarizingInt(ToIntFunction<? super T> mapper)
int
を返す関数を適用し、結果の値に対する要約統計量を返すCollector
を返す。
public static <T> Collector<T,?,LongSummaryStatistics> summarizingLong(ToLongFunction<? super T> mapper)
long
を返す関数を適用し、結果の値に対する要約統計量を返すCollector
を返す。
public static <T> Collector<T,?,DoubleSummaryStatistics> summarizingDouble(ToDoubleFunction<? super T> mapper)
double
を返す関数を適用し、結果の値に対する要約統計量を返すCollector
を返す。