import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class GroupingByConcurrentExample {
public static void main(String[] args) {
Stream<Integer> numbers = Stream.of(1,3,5,10, -2).parallel();
/* insert code */ nums =
numbers.collect(Collectors.groupingByConcurrent(n -> {
if(n % 2 == 0) return "even";
else return "odd";
}));
System.out.println(nums);
}
}
出力結果 1
{even=[10, -2], odd=[1, 3, 5]}
出力結果 2
{even=[-2, 10], odd=[5, 3, 1]}
insert codeに入力するコードとして適切なものはどれでしょうか
-
Map<String, List<Integer>>
-
Map<String, Integer>
-
Set<String, Integer>
-
ParallelStream<Map<String, List<Integer>>
-
Optional<Map<String, List<Integer>>
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
正解
1 Map<String, List<Integer>>
groupingByConcurrentメソッドを使用することで、ストリーム内の要素を指定した分類関数に基づいてグループ化し、その結果をMapに収集します。
Mapのキーは分類関数の結果(この場合は "even" または "odd")、値はそのグループに属する要素のリストです。
public static <T,K> Collector<T,?,ConcurrentMap<K,List<T>>> groupingByConcurrent(Function<? super T,? extends K> classifier)
ストリーム内の要素を指定されたclassifier関数に基づいて分類します。
分類された結果はConcurrentMapとして返され、キーが分類結果、値がその分類に属する要素のリストになります。
Collector<T, ?, ConcurrentMap<K, List<T>>>
この部分は、メソッドがCollectorを返すことを示します。Collectorは、ストリームの要素を収集するためのオブジェクトです。返されるCollectorは、要素をConcurrentMap(並列で操作可能なMap)にグループ化し、キーKには分類の結果が入り、値には分類された要素Tのリストが入ります。
groupingByConcurrent(Function<? super T, ? extends K> classifier)
要素を分類するための関数(分類関数)です。この関数は、ストリーム内の各要素Tを受け取り、それを分類するためのキーKを返します。