Collector実装。
定義済のコレクタを使って一般的な可変リダクション・タスクを実行する例を、次に示します。
// Accumulate names into a List
List<String> list = people.stream()
.map(Person::getName)
.collect(Collectors.toList());
// Accumulate names into a TreeSet
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
// Convert elements to strings and concatenate them, separated by commas
String joined = things.stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
// Compute sum of salaries of employee
int total = employees.stream()
.collect(Collectors.summingInt(Employee::getSalary));
// Group employees by department
Map<Department, List<Employee>> byDept = employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment));
// Compute sum of salaries by department
Map<Department, Integer> totalByDept = employees.stream()
.collect(Collectors.groupingBy(Employee::getDepartment,
Collectors.summingInt(Employee::getSalary)));
// Partition students into passing and failing
Map<Boolean, List<Student>> passingFailing = students.stream()
.collect(Collectors.partitioningBy(s -> s.getGrade() >= PASS_THRESHOLD));
- 導入されたバージョン:
- 1.8
-
メソッドのサマリー
修飾子と型メソッド説明averagingDouble(ToDoubleFunction<? super T> mapper) 入力要素にdouble値関数を適用した結果の算術平均を生成するCollectorを返します。averagingInt(ToIntFunction<? super T> mapper) 入力要素にint値関数を適用した結果の算術平均を生成するCollectorを返します。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を適応させます。counting()T型の要素を受け入れて、入力要素の数をカウントする、Collectorを返します。static <T,A, R> Collector <T, ?, R> 述語を各入力要素に適用し、述語がtrueを返す場合にのみ累積することによって、Collectorを同じ型の要素Tを受け入れる要素に適合させます。static <T,U, A, R>
Collector<T, ?, R> flatMapping(Function<? super T, ? extends Stream<? extends U>> mapper, Collector<? super U, A, R> downstream) 蓄積前に各入力要素にフラット・マッピング関数を適用することにより、U型の要素を受け入れるCollectorを、T型の要素を受け入れる1つの要素に適応させます。groupingBy(Function<? super T, ? extends K> classifier) 分類関数に従って要素をグループ化し、結果をMapに格納して返す、T型の入力要素に対する「グループ化」操作を実装したCollectorを返します。groupingBy(Function<? super T, ? extends K> classifier, Supplier<M> mapFactory, Collector<? super T, A, D> downstream) 分類関数に従って要素をグループ化した後、指定された下流Collectorを使って特定のキーに関連付けられた値のリダクション操作を実行する、T型の入力要素に対するカスケード「グループ化」操作を実装したCollectorを返します。groupingBy(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream) 分類関数に従って要素をグループ化した後、指定された下流Collectorを使って特定のキーに関連付けられた値のリダクション操作を実行する、T型の入力要素に対するカスケード「グループ化」操作を実装したCollectorを返します。static <T,K> Collector <T, ?, ConcurrentMap<K, List<T>>> groupingByConcurrent(Function<? super T, ? extends K> classifier) 分類関数に従って要素をグループ化する、T型の入力要素に対する「グループ化」操作を実装した並行Collectorを返します。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) 分類関数に従って要素をグループ化した後、指定された下流Collectorを使って特定のキーに関連付けられた値のリダクション操作を実行する、T型の入力要素に対するカスケード「グループ化」操作を実装した並行Collectorを返します。static <T,K, A, D>
Collector<T, ?, ConcurrentMap<K, D>> groupingByConcurrent(Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream) 分類関数に従って要素をグループ化した後、指定された下流Collectorを使って特定のキーに関連付けられた値のリダクション操作を実行する、T型の入力要素に対するカスケード「グループ化」操作を実装した並行Collectorを返します。static Collector<CharSequence, ?, String> joining()入力要素を検出順に連結して1つのStringにするCollectorを返します。static Collector<CharSequence, ?, String> joining(CharSequence delimiter) 入力要素を検出順に指定された区切り文字で区切りながら連結するCollectorを返します。static Collector<CharSequence, ?, String> joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix) 入力要素を検出順に指定された区切り文字で区切りながら連結し、指定された接頭辞と接尾辞を付加するCollectorを返します。static <T,U, A, R>
Collector<T, ?, R> U型の要素を受け取るCollectorがT型の要素を受け取れるように適応させるため、各入力要素にマッピング関数を適用した後で蓄積を行うようにします。maxBy(Comparator<? super T> comparator) 指定されたComparatorに従ってOptional<T>として記述された最大要素を生成するCollectorを返します。minBy(Comparator<? super T> comparator) 指定されたComparatorに従ってOptional<T>として記述された最小要素を生成するCollectorを返します。partitioningBy(Predicate<? super T> predicate) Predicateに従って入力要素を分割し、結果をMap<Boolean, List<T>>内に格納するCollectorを返します。partitioningBy(Predicate<? super T> predicate, Collector<? super T, A, D> downstream) Predicateに従って入力要素を分割し、別のCollectorに従って各パーティションの値をリデュースし、結果をMap<Boolean, D>内に格納するCollectorを返します(下流のリダクションの結果がマップの値になる)。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を返します。summingDouble(ToDoubleFunction<? super T> mapper) 入力要素に適用されたdouble値関数の合計を生成するCollectorを返します。summingInt(ToIntFunction<? super T> mapper) 入力要素に適用される整数値関数の合計を生成するCollectorを返します。summingLong(ToLongFunction<? super T> mapper) 入力要素に適用されたlong値関数の合計を生成するCollectorを返します。static <T,R1, R2, R>
Collector<T, ?, R> teeing(Collector<? super T, ?, R1> downstream1, Collector<? super T, ?, R2> downstream2, BiFunction<? super R1, ? super R2, R> merger) 2つのダウンストリーム・コレクタのコンポジットであるCollectorを返します。static <T,C extends Collection<T>>
Collector<T, ?, C> 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>>
Collector<T, ?, M> toConcurrentMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapFactory) ConcurrentMap内に要素を累積する並行Collectorを返します(指定されたマッピング関数を入力要素に適用した結果が、マップのキーと値になる)。toList()入力要素を新しいListに蓄積するCollectorを返します。Map(そのキーと値は指定されたマッピング関数を入力要素に適用した結果である)内に要素を蓄積するCollectorを返します。toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction) Map(そのキーと値は指定されたマッピング関数を入力要素に適用した結果である)内に要素を蓄積するCollectorを返します。toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapFactory) Map(そのキーと値は指定されたマッピング関数を入力要素に適用した結果である)内に要素を蓄積するCollectorを返します。toSet()入力要素を新しいSetに蓄積するCollectorを返します。Collectorを返します。これは入力エレメントを「変更不可能なList」に遭遇順序で累積します。toUnmodifiableMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper) 入力要素を「変更不可能なMap」に累計するCollectorを返します。このキーと値は、指定されたマッピング関数を入力要素に適用した結果です。toUnmodifiableMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction) 入力要素を「変更不可能なMap」に累計するCollectorを返します。このキーと値は、指定されたマッピング関数を入力要素に適用した結果です。入力要素を「変更不可能なSet」に累計するCollectorを返します。
-
メソッドの詳細
-
toCollection
public static <T,C extends Collection<T>> Collector<T,?, toCollectionC> (Supplier<C> collectionFactory) 入力要素を検出順に新しいCollectionに蓄積するCollectorを返します。Collectionは指定されたファクトリによって作成されます。- 型パラメータ:
T- 入力要素の型C- 結果となるCollectionの型- パラメータ:
collectionFactory- 結果が挿入される新しい空のCollectionを提供するサプライヤ- 戻り値:
- すべての入力要素を検出順に
Collection内に集めるCollector
-
toList
入力要素を新しいListに蓄積するCollectorを返します。 返されるListの型、可変性、直列化可能性、またはスレッド安全性は一切保証されません。返されるListをより細かく制御する必要がある場合は、toCollection(Supplier)を使用してください。- 型パラメータ:
T- 入力要素の型- 戻り値:
- すべての入力要素を検出順に
List内に集めるCollector
-
toUnmodifiableList
Collectorを返します。これは入力エレメントを「変更不可能なList」に遭遇順序で累積します。 返されたコレクタはnull値を許可しません。また、null値が指定されている場合はNullPointerExceptionをスローします。- 型パラメータ:
T- 入力要素の型- 戻り値:
Collectorは入力エレメントをエン・カウンタ・オーダーで「変更不可能なList」に蓄積- 導入されたバージョン:
- 10
-
toSet
入力要素を新しいSetに蓄積するCollectorを返します。 返されるSetの型、可変性、直列化可能性、またはスレッド安全性は一切保証されません。返されるSetをより細かく制御する必要がある場合は、toCollection(Supplier)を使用してください。これは、
順序付けされていないCollectorです。- 型パラメータ:
T- 入力要素の型- 戻り値:
- すべての入力要素を
Set内に集めるCollector
-
toUnmodifiableSet
入力要素を「変更不可能なSet」に累計するCollectorを返します。 返されたコレクタはnull値を許可しません。また、null値が指定されている場合はNullPointerExceptionをスローします。 入力に重複要素が含まれている場合、重複要素の任意の要素が保持されます。これは、
順序付けされていないCollectorです。- 型パラメータ:
T- 入力要素の型- 戻り値:
- 入力要素を「変更不可能なSet」に蓄積する
Collector - 導入されたバージョン:
- 10
-
joining
public static Collector<CharSequence,?, joining()String> 入力要素を検出順に連結して1つのStringにするCollectorを返します。- 戻り値:
- 入力要素を検出順に連結して1つの
StringにするCollector
-
joining
public static Collector<CharSequence,?, joiningString> (CharSequence delimiter) 入力要素を検出順に指定された区切り文字で区切りながら連結するCollectorを返します。- パラメータ:
delimiter- 各要素間で使用される区切り文字- 戻り値:
- CharSequence要素を検出順に指定された区切り文字で区切りながら連結する
Collector
-
joining
public static Collector<CharSequence,?, joiningString> (CharSequence delimiter, CharSequence prefix, CharSequence suffix) 入力要素を検出順に指定された区切り文字で区切りながら連結し、指定された接頭辞と接尾辞を付加するCollectorを返します。- パラメータ:
delimiter- 各要素間で使用される区切り文字prefix- 連結結果の先頭で使用される文字シーケンスsuffix- 連結結果の末尾で使用される文字シーケンス- 戻り値:
- CharSequence要素を検出順に指定された区切り文字で区切りながら連結する
Collector
-
mapping
public static <T,U, Collector<T,A, R> ?, mappingR> (Function<? super T, ? extends U> mapper, Collector<? super U, A, R> downstream) U型の要素を受け取るCollectorがT型の要素を受け取れるように適応させるため、各入力要素にマッピング関数を適用した後で蓄積を行うようにします。- APIのノート:
mapping()コレクタがもっとも役に立つのは、複数レベルのリダクション(groupingByまたはpartitioningByの下流など)で使用する場合です。 たとえば、特定のPersonストリームについて、市町村ごとに名前のセットを蓄積するには、次のようにします。Map<City, Set<String>> lastNamesByCity = people.stream().collect( groupingBy(Person::getCity, mapping(Person::getLastName, toSet())));- 型パラメータ:
T- 入力要素の型U- 下流コレクタが受け取る要素の型A- 下流コレクタの中間蓄積の型R- コレクタの結果の型- パラメータ:
mapper- 入力要素に適用される関数downstream- マップ後の値を受け取るコレクタ- 戻り値:
- 入力要素にマッピング関数を適用し、そのマップされた結果を下流のコレクタに渡すコレクタ
-
flatMapping
public static <T,U, Collector<T,A, R> ?, flatMappingR> (Function<? super T, ? extends Stream<? extends U>> mapper, Collector<? super U, A, R> downstream) 蓄積前に各入力要素にフラット・マッピング関数を適用することにより、U型の要素を受け入れるCollectorを、T型の要素を受け入れる1つの要素に適応させます。 フラット・マッピング関数は、入力要素をゼロ個以上の出力要素を含むstreamにマップし、その後ダウンストリームを累積します。 マップされた各ストリームは、その内容がダウンストリームに配置された後、closedになります。 (マップ先ストリームがnullの場合はかわりに空のストリームが使用されます。)- APIのノート:
flatMapping()コレクタは、groupingByまたはpartitioningByのダウンストリームなど、マルチレベルの縮小で使用される場合に最も役立ちます。 たとえば、Orderのストリームを指定すると、顧客ごとに明細項目のセットを累計できます:Map<String, Set<LineItem>> itemsByCustomerName = orders.stream().collect( groupingBy(Order::getCustomerName, flatMapping(order -> order.getLineItems().stream(), toSet())));- 型パラメータ:
T- 入力要素の型U- 下流コレクタが受け取る要素の型A- 下流コレクタの中間蓄積の型R- コレクタの結果の型- パラメータ:
mapper- 入力要素に適用する関数。結果のストリームを返しますdownstream- マッパーによって返されたストリームの要素を受け取るコレクタ- 戻り値:
- マッピング機能を入力要素に適用し、フラット・マップ結果をダウンストリーム・コレクタに提供するコレクタ
- 導入されたバージョン:
- 9
-
filtering
public static <T,A, Collector<T,R> ?, filteringR> (Predicate<? super T> predicate, Collector<? super T, A, R> downstream) 述語を各入力要素に適用し、述語がtrueを返す場合にのみ累積することによって、Collectorを同じ型の要素Tを受け入れる要素に適合させます。- APIのノート:
filtering()コレクタは、groupingByまたはpartitioningByのダウンストリームなど、マルチレベルの縮小で使用される場合に最も役立ちます。 たとえば、Employeeというストリームを指定すると、給与が特定のしきい値を超えている各部門の従業員を累計できます:
フィルタ・コレクタは、ストリームのMap<Department, Set<Employee>> wellPaidEmployeesByDepartment = employees.stream().collect( groupingBy(Employee::getDepartment, filtering(e -> e.getSalary() > 2000, toSet())));filter()操作とは異なります。 この例では、一部の部門で給与がしきい値を超えている従業員がいないとします。 上記のようにフィルタリング・コレクタを使用すると、その部門から空のSetにマッピングされます。 かわりにストリームfilter()操作が実行された場合、その部門に対するマッピングはまったくありません。- 型パラメータ:
T- 入力要素の型A- 下流コレクタの中間蓄積の型R- コレクタの結果の型- パラメータ:
predicate- 入力要素に適用される述語downstream- 述語と一致する値を受け入れるコレクタ- 戻り値:
- 述語を入力要素に適用し、一致する要素を下流のコレクタに提供するコレクタ
- 導入されたバージョン:
- 9
-
collectingAndThen
public static <T,A, Collector<T,R, RR> A, collectingAndThenRR> (Collector<T, A, R> downstream, Function<R, RR> finisher) 追加の仕上げ変換が実行されるようにCollectorを適応させます。 たとえば次のように、常に不変リストが生成されるようにtoList()コレクタを適応させることができます。List<String> list = people.stream().collect( collectingAndThen(toList(), Collections::unmodifiableList));- 型パラメータ:
T- 入力要素の型A- 下流コレクタの中間蓄積の型R- 下流コレクタの結果の型RR- 結果となるコレクタの結果の型- パラメータ:
downstream- コレクタfinisher- 下流コレクタの最終結果に適用される関数- 戻り値:
- 下流コレクタのアクションを実行した後で追加の最終ステップを実行するコレクタ
-
counting
T型の要素を受け入れて、入力要素の数をカウントする、Collectorを返します。 要素が存在しない場合、結果は0になります。- 実装要件:
- これは次と同等の結果を生成します。
reducing(0L, e -> 1L, Long::sum) - 型パラメータ:
T- 入力要素の型- 戻り値:
- 入力要素の数をカウントする
Collector
-
minBy
public static <T> Collector<T,?, minByOptional<T>> (Comparator<? super T> comparator) 指定されたComparatorに従ってOptional<T>として記述された最小要素を生成するCollectorを返します。- 実装要件:
- これは次と同等の結果を生成します。
reducing(BinaryOperator.minBy(comparator)) - 型パラメータ:
T- 入力要素の型- パラメータ:
comparator- 要素を比較するためのComparator- 戻り値:
- 最小値を生成する
Collector
-
maxBy
public static <T> Collector<T,?, maxByOptional<T>> (Comparator<? super T> comparator) 指定されたComparatorに従ってOptional<T>として記述された最大要素を生成するCollectorを返します。- 実装要件:
- これは次と同等の結果を生成します。
reducing(BinaryOperator.maxBy(comparator)) - 型パラメータ:
T- 入力要素の型- パラメータ:
comparator- 要素を比較するためのComparator- 戻り値:
- 最大値を生成する
Collector
-
summingInt
public static <T> Collector<T,?, summingIntInteger> (ToIntFunction<? super T> mapper) 入力要素に適用される整数値関数の合計を生成するCollectorを返します。 要素が存在しない場合、結果は0になります。- 型パラメータ:
T- 入力要素の型- パラメータ:
mapper- 合計の対象となるプロパティーを抽出する関数- 戻り値:
- 導出されたプロパティーの合計を生成する
Collector
-
summingLong
public static <T> Collector<T,?, summingLongLong> (ToLongFunction<? super T> mapper) 入力要素に適用されたlong値関数の合計を生成するCollectorを返します。 要素が存在しない場合、結果は0になります。- 型パラメータ:
T- 入力要素の型- パラメータ:
mapper- 合計の対象となるプロパティーを抽出する関数- 戻り値:
- 導出されたプロパティーの合計を生成する
Collector
-
summingDouble
public static <T> Collector<T,?, summingDoubleDouble> (ToDoubleFunction<? super T> mapper) 入力要素に適用されたdouble値関数の合計を生成するCollectorを返します。 要素が存在しない場合、結果は0になります。値が記録されている順番によって、返される合計が変わる可能性がありますが、これは、異なる大きさの値同士を加算したときの丸め誤差が累積されるからです。 値を大きさの絶対値の昇順にソートすると、結果の精度が改善される傾向があります。 記録された値の中に
NaNのものが存在しているか、合計がある時点でNaNに達した場合、合計はNaNになります。- 型パラメータ:
T- 入力要素の型- パラメータ:
mapper- 合計の対象となるプロパティーを抽出する関数- 戻り値:
- 導出されたプロパティーの合計を生成する
Collector
-
averagingInt
public static <T> Collector<T,?, averagingIntDouble> (ToIntFunction<? super T> mapper) 入力要素にint値関数を適用した結果の算術平均を生成するCollectorを返します。 要素が存在しない場合、結果は0になります。- 型パラメータ:
T- 入力要素の型- パラメータ:
mapper- 平均化するプロパティを抽出する関数- 戻り値:
- 派生プロパティの算術平均を生成する
Collector
-
averagingLong
public static <T> Collector<T,?, averagingLongDouble> (ToLongFunction<? super T> mapper) 入力要素にlong値関数を適用した結果の算術平均を生成するCollectorを返します。 要素が存在しない場合、結果は0になります。- 型パラメータ:
T- 入力要素の型- パラメータ:
mapper- 平均化するプロパティを抽出する関数- 戻り値:
- 派生プロパティの算術平均を生成する
Collector
-
averagingDouble
public static <T> Collector<T,?, averagingDoubleDouble> (ToDoubleFunction<? super T> mapper) 入力要素にdouble値関数を適用した結果の算術平均を生成するCollectorを返します。 要素が存在しない場合、結果は0になります。値が記録されている順番によって、返される平均が変わる可能性がありますが、これは、異なる大きさの値同士を加算したときの丸め誤差が累積されるからです。 値を大きさの絶対値の昇順にソートすると、結果の精度が改善される傾向があります。 記録された値の中に
NaNのものが存在しているか、合計がある時点でNaNに達した場合、平均はNaNになります。- 実装上のノート:
doubleフォーマットは、-253から253の範囲のすべての連続する整数を表現できます。 パイプラインに含まれる値の数が253個を超える場合、平均計算の除数が253で飽和するため、さらなる数値誤差が発生します。- 型パラメータ:
T- 入力要素の型- パラメータ:
mapper- 平均化するプロパティを抽出する関数- 戻り値:
- 派生プロパティの算術平均を生成する
Collector
-
reducing
public static <T> Collector<T,?, reducingT> (T identity, BinaryOperator<T> op) 指定されたBinaryOperatorの下で指定された単位元を使って入力要素のリダクションを実行するCollectorを返します。- APIのノート:
reducing()コレクタがもっとも役に立つのは、複数レベルのリダクション(groupingByまたはpartitioningByの下流)で使用する場合です。 ストリームに対して単純なリダクションを実行する場合は、代わりにStream.reduce(Object, BinaryOperator)を使用してください。- 型パラメータ:
T- リダクションの入力と出力の要素の型- パラメータ:
identity- リダクションの単位元の値(入力要素が存在しない場合の戻り値でもある)op- 入力要素のリデュースに使用されるBinaryOperator<T>- 戻り値:
- リダクション操作を実装した
Collector - 関連項目:
-
reducing
public static <T> Collector<T,?, reducingOptional<T>> (BinaryOperator<T> op) 指定されたBinaryOperatorの下で入力要素のリダクションを実行するCollectorを返します。 結果はOptional<T>として記述されます。- APIのノート:
reducing()コレクタがもっとも役に立つのは、複数レベルのリダクション(groupingByまたはpartitioningByの下流)で使用する場合です。 単純なリダクションをストリームに対して実行する場合は、代わりにStream.reduce(BinaryOperator)を使用してください。たとえば、特定の
Personストリームについて、市町村ごとに身長のもっとも高い人を計算するには、次のようにします。Comparator<Person> byHeight = Comparator.comparing(Person::getHeight); Map<City, Optional<Person>> tallestByCity = people.stream().collect( groupingBy(Person::getCity, reducing(BinaryOperator.maxBy(byHeight))));- 型パラメータ:
T- リダクションの入力と出力の要素の型- パラメータ:
op- 入力要素のリデュースに使用されるBinaryOperator<T>- 戻り値:
- リダクション操作を実装した
Collector - 関連項目:
-
reducing
public static <T,U> Collector<T,?, reducingU> (U identity, Function<? super T, ? extends U> mapper, BinaryOperator<U> op) 指定されたマッピング関数とBinaryOperatorの下で入力要素のリダクションを実行するCollectorを返します。 これはreducing(Object, BinaryOperator)を一般化したものであり、リダクションの前の要素の変換を可能にします。- APIのノート:
reducing()コレクタがもっとも役に立つのは、複数レベルのリダクション(groupingByまたはpartitioningByの下流)で使用する場合です。 単純なマップ-リデュースをストリームに対して実行する場合は、代わりにStream.map(Function)とStream.reduce(Object, BinaryOperator)を使用してください。たとえば、特定の
Personストリームについて、市町村ごとに住民の最長の名前を計算するには、次のようにします。Comparator<String> byLength = Comparator.comparing(String::length); Map<City, String> longestLastNameByCity = people.stream().collect( groupingBy(Person::getCity, reducing("", Person::getLastName, BinaryOperator.maxBy(byLength))));- 型パラメータ:
T- 入力要素の型U- マップ後の値の型- パラメータ:
identity- リダクションの単位元の値(入力要素が存在しない場合の戻り値でもある)mapper- 各入力値に適用するマッピング関数op- マップされた値のリデュースに使用されるBinaryOperator<U>- 戻り値:
- マップ-リデュース操作を実装した
Collector - 関連項目:
-
groupingBy
public static <T,K> Collector<T,?, groupingByMap<K, List<T>>> (Function<? super T, ? extends K> classifier) 分類関数に従って要素をグループ化し、結果をMapに格納して返す、T型の入力要素に対する「グループ化」操作を実装したCollectorを返します。分類関数は、要素をあるキーの型
Kにマップします。 コレクタによって生成されるMap<K, List<T>>のキーは、入力要素に分類関数を適用した結果の値であり、対応する値は、分類関数の下で関連キーにマップされた入力要素を含むListになります。返される
MapまたはListオブジェクトの型、可変性、直列化可能性、またはスレッド安全性は一切保証されません。- 実装要件:
- これは次のような結果を生成します。
groupingBy(classifier, toList()); - 実装上のノート:
- 返される
Collectorは並行ではありません。 並列ストリーム・パイプラインでは、combiner関数はあるマップのキーを別のマップにマージすることにより動作しますが、この操作はコストが非常に高くなる可能性があります。 結果のMapコレクタで要素の出現順序を維持する必要がない場合、groupingByConcurrent(Function)を使用することで並列処理のパフォーマンスが改善される可能性があります。 - 型パラメータ:
T- 入力要素の型K- キーの型- パラメータ:
classifier- 入力要素をキーにマップする分類関数- 戻り値:
- グループ化操作を実装した
Collector - 関連項目:
-
groupingBy
public static <T,K, Collector<T,A, D> ?, groupingByMap<K, D>> (Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream) 分類関数に従って要素をグループ化した後、指定された下流Collectorを使って特定のキーに関連付けられた値のリダクション操作を実行する、T型の入力要素に対するカスケード「グループ化」操作を実装したCollectorを返します。分類関数は、要素をあるキーの型
Kにマップします。 下流コレクタは、T型の要素に作用してD型の結果を生成します。 結果となるコレクタは、Map<K, D>を生成します。返される
Mapの型、可変性、直列化可能性、またはスレッド安全性は一切保証されません。たとえば、市町村ごとの人の名前のセットを計算するには、次のようにします。
Map<City, Set<String>> namesByCity = people.stream().collect( groupingBy(Person::getCity, mapping(Person::getLastName, toSet())));- 実装上のノート:
- 返される
Collectorは並行ではありません。 並列ストリーム・パイプラインでは、combiner関数はあるマップのキーを別のマップにマージすることにより動作しますが、この操作はコストが非常に高くなる可能性があります。 下流コレクタに要素が提供される順序を維持する必要がない場合、groupingByConcurrent(Function, Collector)を使用することで並列処理のパフォーマンスが改善される可能性があります。 - 型パラメータ:
T- 入力要素の型K- キーの型A- 下流コレクタの中間蓄積の型D- 下流リダクションの結果の型- パラメータ:
classifier- 入力要素をキーにマップする分類関数downstream- 下流リダクションを実装したCollector- 戻り値:
- カスケード・グループ化操作を実装した
Collector - 関連項目:
-
groupingBy
public static <T,K, Collector<T,D, A, M extends Map<K, D>> ?, groupingByM> (Function<? super T, ? extends K> classifier, Supplier<M> mapFactory, Collector<? super T, A, D> downstream) 分類関数に従って要素をグループ化した後、指定された下流Collectorを使って特定のキーに関連付けられた値のリダクション操作を実行する、T型の入力要素に対するカスケード「グループ化」操作を実装した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())));- 実装上のノート:
- 返される
Collectorは並行ではありません。 並列ストリーム・パイプラインでは、combiner関数はあるマップのキーを別のマップにマージすることにより動作しますが、この操作はコストが非常に高くなる可能性があります。 下流コレクタに要素が提供される順序を維持する必要がない場合、groupingByConcurrent(Function, Supplier, Collector)を使用することで並列処理のパフォーマンスが改善される可能性があります。 - 型パラメータ:
T- 入力要素の型K- キーの型D- 下流リダクションの結果の型A- 下流コレクタの中間蓄積の型M- 結果となるMapの型- パラメータ:
classifier- 入力要素をキーにマップする分類関数mapFactory- 結果が挿入される新しい空のMapを提供するサプライヤdownstream- 下流リダクションを実装したCollector- 戻り値:
- カスケード・グループ化操作を実装した
Collector - 関連項目:
-
groupingByConcurrent
public static <T,K> Collector<T,?, groupingByConcurrentConcurrentMap<K, List<T>>> (Function<? super T, ? extends K> classifier) 分類関数に従って要素をグループ化する、T型の入力要素に対する「グループ化」操作を実装した並行Collectorを返します。これは、
順序付けされていない並行なCollectorです。分類関数は、要素をあるキーの型
Kにマップします。 コレクタによって生成されるConcurrentMap<K, List<T>>のキーは、入力要素に分類関数を適用した結果の値であり、対応する値は、分類関数の下で関連キーにマップされた入力要素を含むListになります。返された
ConcurrentMapオブジェクトまたはListオブジェクトのタイプ、変更可能性または直列化可能性、または返されたListオブジェクトのスレッド・セーフティに対する保証はありません。- 実装要件:
- これは次のような結果を生成します。
groupingByConcurrent(classifier, toList()); - 型パラメータ:
T- 入力要素の型K- キーの型- パラメータ:
classifier- 入力要素をキーにマップする分類関数- 戻り値:
- グループ化操作を実装した、順序付けされていない並行な
Collector - 関連項目:
-
groupingByConcurrent
public static <T,K, Collector<T,A, D> ?, groupingByConcurrentConcurrentMap<K, D>> (Function<? super T, ? extends K> classifier, Collector<? super T, A, D> downstream) 分類関数に従って要素をグループ化した後、指定された下流Collectorを使って特定のキーに関連付けられた値のリダクション操作を実行する、T型の入力要素に対するカスケード「グループ化」操作を実装した並行Collectorを返します。これは、
順序付けされていない並行なCollectorです。分類関数は、要素をあるキーの型
Kにマップします。 下流コレクタは、T型の要素に作用してD型の結果を生成します。 結果のコレクタはConcurrentMap<K, D>を生成します。戻される
ConcurrentMapのタイプ、変更可能性または直列化可能性は保証されません。たとえば、市町村ごとの人の名前のセット(市町村名がソートされる)を計算するには、次のようにします。
ConcurrentMap<City, Set<String>> namesByCity = people.stream().collect( groupingByConcurrent(Person::getCity, mapping(Person::getLastName, toSet())));- 型パラメータ:
T- 入力要素の型K- キーの型A- 下流コレクタの中間蓄積の型D- 下流リダクションの結果の型- パラメータ:
classifier- 入力要素をキーにマップする分類関数downstream- 下流リダクションを実装したCollector- 戻り値:
- カスケード・グループ化操作を実装した、順序付けされていない並行な
Collector - 関連項目:
-
groupingByConcurrent
public static <T,K, Collector<T,A, D, M extends ConcurrentMap<K, D>> ?, groupingByConcurrentM> (Function<? super T, ? extends K> classifier, Supplier<M> mapFactory, Collector<? super T, A, D> downstream) 分類関数に従って要素をグループ化した後、指定された下流Collectorを使って特定のキーに関連付けられた値のリダクション操作を実行する、T型の入力要素に対するカスケード「グループ化」操作を実装した並行Collectorを返します。 このCollectorで生成されるConcurrentMapは、指定されたファクトリ関数によって作成されます。これは、
順序付けされていない並行なCollectorです。分類関数は、要素をあるキーの型
Kにマップします。 下流コレクタは、T型の要素に作用してD型の結果を生成します。 結果のコレクタはConcurrentMap<K, D>を生成します。たとえば、市町村ごとの人の名前のセット(市町村名がソートされる)を計算するには、次のようにします。
ConcurrentMap<City, Set<String>> namesByCity = people.stream().collect( groupingByConcurrent(Person::getCity, ConcurrentSkipListMap::new, mapping(Person::getLastName, toSet())));- 型パラメータ:
T- 入力要素の型K- キーの型A- 下流コレクタの中間蓄積の型D- 下流リダクションの結果の型M- 結果となるConcurrentMapの型- パラメータ:
classifier- 入力要素をキーにマップする分類関数mapFactory- 結果が挿入される新しい空のConcurrentMapを提供するサプライヤdownstream- 下流リダクションを実装したCollector- 戻り値:
- カスケード・グループ化操作を実装した、順序付けされていない並行な
Collector - 関連項目:
-
partitioningBy
public static <T> Collector<T,?, partitioningByMap<Boolean, List<T>>> (Predicate<? super T> predicate) Predicateに従って入力要素を分割し、結果をMap<Boolean, List<T>>内に格納するCollectorを返します。 返されるMapには、常にfalseキーとtrueキーの両方のマッピングが含まれます。 返されたMapまたはListのタイプ、変更可能性、直列化可能性またはスレッド・セーフティに対する保証はありません。- APIのノート:
- パーティションに要素がない場合、結果マップ内のその値は空のリストになります。
- 型パラメータ:
T- 入力要素の型- パラメータ:
predicate- 入力要素の分類に使用される述語- 戻り値:
- 分割操作を実装した
Collector - 関連項目:
-
partitioningBy
public static <T,D, Collector<T,A> ?, partitioningByMap<Boolean, D>> (Predicate<? super T> predicate, Collector<? super T, A, D> downstream) Predicateに従って入力要素を分割し、別のCollectorに従って各パーティションの値をリデュースし、結果をMap<Boolean, D>内に格納するCollectorを返します(下流のリダクションの結果がマップの値になる)。返される
Mapには、常にfalseキーとtrueキーの両方のマッピングが含まれます。 返されるMapの型、可変性、直列化可能性、またはスレッド安全性は一切保証されません。- APIのノート:
- パーティションに要素がない場合、結果Map内のその値は、ダウンストリーム・コレクタのサプライヤ関数をコールし、終了関数を適用することで取得されます。
- 型パラメータ:
T- 入力要素の型D- 下流リダクションの結果の型A- 下流コレクタの中間蓄積の型- パラメータ:
predicate- 入力要素の分類に使用される述語downstream- 下流リダクションを実装したCollector- 戻り値:
- カスケード分割操作を実装した
Collector - 関連項目:
-
toMap
public static <T,K, Collector<T,U> ?, toMapMap<K, U>> (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper) Map(そのキーと値は指定されたマッピング関数を入力要素に適用した結果である)内に要素を蓄積するCollectorを返します。マップされたキーに重複(
Object.equals(Object)によると)が含まれている場合、収集操作の実行時にIllegalStateExceptionがスローされます。 マップされたキーに重複がある場合は、代わりにtoMap(Function, Function, BinaryOperator)を使用してください。返される
Mapの型、可変性、直列化可能性、またはスレッド安全性は一切保証されません。- APIのノート:
- キーと値のどちらかが入力要素になることは、めずらしくありません。 その場合は、ユーティリティー・メソッド
Function.identity()が役立つ可能性があります。 たとえば次の場合、生徒を各自の成績評定平均値にマッピングするMapが生成されます。
また次の場合、一意の識別子を生徒にマッピングするMap<Student, Double> studentToGPA = students.stream().collect( toMap(Function.identity(), student -> computeGPA(student)));Mapが生成されます。Map<String, Student> studentIdToStudent = students.stream().collect( toMap(Student::getId, Function.identity())); - 実装上のノート:
- 返される
Collectorは並行ではありません。 並列ストリーム・パイプラインでは、combiner関数はあるマップのキーを別のマップにマージすることにより動作しますが、この操作はコストが非常に高くなる可能性があります。 結果を検出順でMapに挿入する必要がない場合は、toConcurrentMap(Function, Function)を使用することで並列処理のパフォーマンスが改善される可能性があります。 - 型パラメータ:
T- 入力要素の型K- キー・マッピング関数の出力の型U- 値マッピング関数の出力の型- パラメータ:
keyMapper- キーを生成するマッピング関数valueMapper- 値を生成するマッピング関数- 戻り値:
Map内に要素を集めるCollector(マップのキーと値は、入力要素にマッピング関数を適用した結果となる)- 関連項目:
-
toUnmodifiableMap
public static <T,K, Collector<T,U> ?, toUnmodifiableMapMap<K, U>> (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper) 入力要素を「変更不可能なMap」に累計するCollectorを返します。このキーと値は、指定されたマッピング関数を入力要素に適用した結果です。マップされたキーに重複(
Object.equals(Object)によると)が含まれている場合、収集操作の実行時にIllegalStateExceptionがスローされます。 マップされたキーに重複がある場合は、toUnmodifiableMap(Function, Function, BinaryOperator)を使用して値のマージを処理します。返されたコレクタは、nullのキーと値を許可しません。 いずれかのマッピング関数がnullを返すと、
NullPointerExceptionがスローされます。- 型パラメータ:
T- 入力要素の型K- キー・マッピング関数の出力の型U- 値マッピング関数の出力の型- パラメータ:
keyMapper- キーを生成するマッピング関数.nullでないvalueMapper- 値を生成するためのマッピング関数.nullでなくてはならない- 戻り値:
- 入力要素を「変更不可能なMap」に蓄積する
Collector。そのキーと値は、指定されたマッピング関数を入力要素に適用した結果です - スロー:
NullPointerException- keyMapperまたはvalueMapperがnullの場合- 導入されたバージョン:
- 10
- 関連項目:
-
toMap
public static <T,K, Collector<T,U> ?, toMapMap<K, U>> (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction) Map(そのキーと値は指定されたマッピング関数を入力要素に適用した結果である)内に要素を蓄積するCollectorを返します。マップされたキーに重複(
Object.equals(Object)によると)が含まれている場合、値マッピング関数が各等価要素に適用され、指定されたマージ関数を使用して結果がマージされます。返される
Mapの型、可変性、直列化可能性、またはスレッド安全性は一切保証されません。- APIのノート:
- 同じキーにマップされた複数要素間の衝突を処理する方法は、複数あります。 他の形式の
toMapではただ無条件にスローを行うマージ関数が使用されますが、より柔軟なマージポリシーを簡単に記述できます。 たとえば、Personのストリームがあり、アドレスへの"電話帳"マッピング名を生成するが、2人のユーザーが同じ名前を持つ可能性がある場合は、次のようにしてこれらの衝突を適切に処理し、アドレスの連結リストにMapマッピング名を生成できます:Map<String, String> phoneBook = people.stream().collect( toMap(Person::getName, Person::getAddress, (s, a) -> s + ", " + a)); - 実装上のノート:
- 返される
Collectorは並行ではありません。 並列ストリーム・パイプラインでは、combiner関数はあるマップのキーを別のマップにマージすることにより動作しますが、この操作はコストが非常に高くなる可能性があります。 結果を検出順でMapにマージする必要がない場合は、toConcurrentMap(Function, Function, BinaryOperator)を使用することで並列処理のパフォーマンスが改善される可能性があります。 - 型パラメータ:
T- 入力要素の型K- キー・マッピング関数の出力の型U- 値マッピング関数の出力の型- パラメータ:
keyMapper- キーを生成するマッピング関数valueMapper- 値を生成するマッピング関数mergeFunction- 同じキーに関連付けられた値同士の衝突の解決に使用されるマージ関数(Map.merge(Object, Object, BiFunction)に渡される)- 戻り値:
Map内に要素を集めるCollector(マップのキーは、入力要素にキー・マッピング関数を適用した結果であり、マップの値は、そのキーに等しいすべての入力要素に値マッピング関数を適用し、それらをマージ関数で結合した結果となる)- 関連項目:
-
toUnmodifiableMap
public static <T,K, Collector<T,U> ?, toUnmodifiableMapMap<K, U>> (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction) 入力要素を「変更不可能なMap」に累計するCollectorを返します。このキーと値は、指定されたマッピング関数を入力要素に適用した結果です。マップされたキーに重複(
Object.equals(Object)によると)が含まれている場合、値マッピング関数が各等価要素に適用され、指定されたマージ関数を使用して結果がマージされます。返されたコレクタは、nullのキーと値を許可しません。 いずれかのマッピング関数がnullを返すと、
NullPointerExceptionがスローされます。- 型パラメータ:
T- 入力要素の型K- キー・マッピング関数の出力の型U- 値マッピング関数の出力の型- パラメータ:
keyMapper- キーを生成するマッピング関数.nullでないvalueMapper- 値を生成するためのマッピング関数.nullでなくてはならないmergeFunction-Map.merge(Object, Object, BiFunction)に指定されているように、同じキーに関連付けられた値間の衝突を解決するために使用されるマージ関数は、null以外である必要があります- 戻り値:
- 入力要素を「変更不可能なMap」に蓄積する
Collector。そのキーと値は、指定されたマッピング関数を入力要素に適用した結果です - スロー:
NullPointerException- keyMapper、valueMapper、またはmergeFunctionがnullの場合- 導入されたバージョン:
- 10
- 関連項目:
-
toMap
public static <T,K, Collector<T,U, M extends Map<K, U>> ?, toMapM> (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapFactory) Map(そのキーと値は指定されたマッピング関数を入力要素に適用した結果である)内に要素を蓄積するCollectorを返します。マップされたキーに重複(
Object.equals(Object)によると)が含まれている場合、値マッピング関数が各等価要素に適用され、指定されたマージ関数を使用して結果がマージされます。Mapは、指定されたサプライヤ関数によって作成されます。- 実装上のノート:
- 返される
Collectorは並行ではありません。 並列ストリーム・パイプラインでは、combiner関数はあるマップのキーを別のマップにマージすることにより動作しますが、この操作はコストが非常に高くなる可能性があります。 結果を検出順でMapにマージする必要がない場合は、toConcurrentMap(Function, Function, BinaryOperator, Supplier)を使用することで並列処理のパフォーマンスが改善される可能性があります。 - 型パラメータ:
T- 入力要素の型K- キー・マッピング関数の出力の型U- 値マッピング関数の出力の型M- 結果となるMapの型- パラメータ:
keyMapper- キーを生成するマッピング関数valueMapper- 値を生成するマッピング関数mergeFunction- 同じキーに関連付けられた値同士の衝突の解決に使用されるマージ関数(Map.merge(Object, Object, BiFunction)に渡される)mapFactory- 結果が挿入される新しい空のMapを提供するサプライヤ- 戻り値:
Map内に要素を集めるCollector(マップのキーは、入力要素にキー・マッピング関数を適用した結果であり、マップの値は、そのキーに等しいすべての入力要素に値マッピング関数を適用し、それらをマージ関数で結合した結果となる)- 関連項目:
-
toConcurrentMap
public static <T,K, Collector<T,U> ?, toConcurrentMapConcurrentMap<K, U>> (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper) ConcurrentMap内に要素を累積する並行Collectorを返します(指定されたマッピング関数を入力要素に適用した結果が、マップのキーと値になる)。マップされたキーに重複(
Object.equals(Object)によると)が含まれている場合、収集操作の実行時にIllegalStateExceptionがスローされます。 マップ先のキーが重複する可能性がある場合は、代わりにtoConcurrentMap(Function, Function, BinaryOperator)を使用してください。戻される
ConcurrentMapのタイプ、変更可能性または直列化可能性は保証されません。- APIのノート:
- キーと値のどちらかが入力要素になることは、めずらしくありません。 その場合は、ユーティリティー・メソッド
Function.identity()が役立つ可能性があります。 たとえば、次の例では、学生を等級ポイント平均にマップするConcurrentMapが生成されます:
次に、学生に一意の識別子をマッピングするConcurrentMap<Student, Double> studentToGPA = students.stream().collect( toConcurrentMap(Function.identity(), student -> computeGPA(student)));ConcurrentMapを生成します。ConcurrentMap<String, Student> studentIdToStudent = students.stream().collect( toConcurrentMap(Student::getId, Function.identity()));これは、
順序付けされていない並行なCollectorです。 - 型パラメータ:
T- 入力要素の型K- キー・マッピング関数の出力の型U- 値マッピング関数の出力の型- パラメータ:
keyMapper- キーを生成するマッピング関数valueMapper- 値を生成するマッピング関数- 戻り値:
ConcurrentMap内に要素を集める、順序付けされていない並行なCollector(マップのキーは、入力要素にキー・マッピング関数を適用した結果であり、マップの値は、入力要素に値マッピング関数を適用した結果となる)- 関連項目:
-
toConcurrentMap
public static <T,K, Collector<T,U> ?, toConcurrentMapConcurrentMap<K, U>> (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction) ConcurrentMap内に要素を累積する並行Collectorを返します(指定されたマッピング関数を入力要素に適用した結果が、マップのキーと値になる)。マップされたキーに重複(
Object.equals(Object)によると)が含まれている場合、値マッピング関数が各等価要素に適用され、指定されたマージ関数を使用して結果がマージされます。戻される
ConcurrentMapのタイプ、変更可能性または直列化可能性は保証されません。- APIのノート:
- 同じキーにマップされた複数要素間の衝突を処理する方法は、複数あります。 他の形式の
toConcurrentMapではただ無条件にスローを行うマージ関数が使用されますが、より柔軟なマージ・ポリシーを簡単に記述できます。 たとえば、Personのストリームがあり、アドレスへの"電話帳"マッピング名を生成するが、2人のユーザーが同じ名前を持つ可能性がある場合は、次のようにしてこれらの衝突を適切に処理し、アドレスの連結リストにConcurrentMapマッピング名を生成できます:ConcurrentMap<String, String> phoneBook = people.stream().collect( toConcurrentMap(Person::getName, Person::getAddress, (s, a) -> s + ", " + a));これは、
順序付けされていない並行なCollectorです。 - 型パラメータ:
T- 入力要素の型K- キー・マッピング関数の出力の型U- 値マッピング関数の出力の型- パラメータ:
keyMapper- キーを生成するマッピング関数valueMapper- 値を生成するマッピング関数mergeFunction- 同じキーに関連付けられた値同士の衝突の解決に使用されるマージ関数(Map.merge(Object, Object, BiFunction)に渡される)- 戻り値:
ConcurrentMap内に要素を集める、順序付けされていない並行なCollector(マップのキーは、入力要素にキー・マッピング関数を適用した結果であり、マップの値は、そのキーに等しいすべての入力要素に値マッピング関数を適用し、それらをマージ関数で結合した結果となる)- 関連項目:
-
toConcurrentMap
public static <T,K, Collector<T,U, M extends ConcurrentMap<K, U>> ?, toConcurrentMapM> (Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction, Supplier<M> mapFactory) ConcurrentMap内に要素を累積する並行Collectorを返します(指定されたマッピング関数を入力要素に適用した結果が、マップのキーと値になる)。マップされたキーに重複(
Object.equals(Object)によると)が含まれている場合、値マッピング関数が各等価要素に適用され、指定されたマージ関数を使用して結果がマージされます。ConcurrentMapは、指定されたサプライヤ関数によって作成されます。これは、
順序付けされていない並行なCollectorです。- 型パラメータ:
T- 入力要素の型K- キー・マッピング関数の出力の型U- 値マッピング関数の出力の型M- 結果となるConcurrentMapの型- パラメータ:
keyMapper- キーを生成するマッピング関数valueMapper- 値を生成するマッピング関数mergeFunction- 同じキーに関連付けられた値同士の衝突の解決に使用されるマージ関数(Map.merge(Object, Object, BiFunction)に渡される)mapFactory- 結果が挿入される新しい空のConcurrentMapを提供するサプライヤ- 戻り値:
ConcurrentMap内に要素を集める、順序付けされていない並行なCollector(マップのキーは、入力要素にキー・マッピング関数を適用した結果であり、マップの値は、そのキーに等しいすべての入力要素に値マッピング関数を適用し、それらをマージ関数で結合した結果となる)- 関連項目:
-
summarizingInt
public static <T> Collector<T,?, summarizingIntIntSummaryStatistics> (ToIntFunction<? super T> mapper) 各入力要素にint生成マッピング関数を適用し、その結果の値のサマリー統計を返すCollectorを返します。- 型パラメータ:
T- 入力要素の型- パラメータ:
mapper- 各要素に適用するマッピング関数- 戻り値:
- サマリー統計リダクションを実装した
Collector - 関連項目:
-
summarizingLong
public static <T> Collector<T,?, summarizingLongLongSummaryStatistics> (ToLongFunction<? super T> mapper) 各入力要素にlong生成マッピング関数を適用し、その結果の値のサマリー統計を返すCollectorを返します。- 型パラメータ:
T- 入力要素の型- パラメータ:
mapper- 各要素に適用するマッピング関数- 戻り値:
- サマリー統計リダクションを実装した
Collector - 関連項目:
-
summarizingDouble
public static <T> Collector<T,?, summarizingDoubleDoubleSummaryStatistics> (ToDoubleFunction<? super T> mapper) 各入力要素にdouble生成マッピング関数を適用し、その結果の値のサマリー統計を返すCollectorを返します。- 型パラメータ:
T- 入力要素の型- パラメータ:
mapper- 各要素に適用するマッピング関数- 戻り値:
- サマリー統計リダクションを実装した
Collector - 関連項目:
-
teeing
public static <T,R1, Collector<T,R2, R> ?, teeingR> (Collector<? super T, ?, R1> downstream1, Collector<? super T, ?, R2> downstream2, BiFunction<? super R1, ? super R2, R> merger) 2つのダウンストリーム・コレクタのコンポジットであるCollectorを返します。 結果のコレクタに渡された各要素は、両方のダウンストリーム・コレクタで処理され、結果は、指定されたマージ関数を使用して最終結果にマージされます。生成されるコレクタ機能では、次の操作を実行します:
- supplier: 、各回収担当サプライヤをコールして取得した結果コンテナを含む結果コンテナを作成
- accumulator: 各コレクタは、結果コンテナおよび入力要素を使用して蓄積されます
- 組合せ: 2つの結果コンテナを持つ各コレクタ・バイラをコール
- finisher: 各コレクタは、結果コンテナとともに終了し、提供された合併をコールしてその結果を返します。
結果のコレクタは、両方のダウンストリーム・コレクタが順序付けされていない場合は
Collector.Characteristics.UNORDERED、両方のダウンストリーム・コレクタが同時接続している場合はCollector.Characteristics.CONCURRENTです。- 型パラメータ:
T- 入力要素の型R1- 最初のコレクタの結果タイプR2- 2番目のコレクタの結果タイプR- 最終結果タイプ- パラメータ:
downstream1- 第1ダウンストリーム回収担当downstream2- 第2ダウンストリーム回収担当merger- 2つの結果を1つの結果にマージする関数- 戻り値:
- 提供された2つのコレクタの結果を集計する
Collector。 - 導入されたバージョン:
- 12
-