Collectors(partitioningBy)難易度 標準無料
次のコードの出力として正しいものを選べ。
1 import java.util.*;
2 import java.util.stream.*;
3 public class Q6 {
4 public static void main(String[] a) {
5 Map<Boolean, List<Integer>> m = Stream.of(1, 2, 3, 4, 5)
6 .collect(Collectors.partitioningBy(n -> n % 2 == 0));
7 System.out.println(m.get(true) + " " + m.get(false));
8 }
9 }
- A
[2, 4] [1, 3, 5] - B
[1, 3, 5] [2, 4] - C
[2, 4] null - Dコンパイルエラー(戻り型は
Map<Boolean, List<Integer>>にならない)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・独立検証済
解説
Collectors.partitioningBy(predicate) は、要素を述語の真偽で2グループに分割し、
Map<Boolean, List<T>> を返す。
述語 n % 2 == 0(偶数か)で分けると、true→[2, 4]、false→[1, 3, 5]。
出力は [2, 4] [1, 3, 5]。
groupingBy との決定的な違いは、partitioningBy は必ず true と false の両キーを含むこと。
一方に該当要素が無くても、そのキーには空リストが入る(m.get(false) が null にならない)。
- B
m.get(true)は述語が真(=偶数)のグループ。先に来るのは[2, 4]であって奇数側ではない。 - C
partitioningByはfalseキーも必ず含む。奇数は該当するので[1, 3, 5]でありnullにはならない。 - D
partitioningBy(Predicate)の戻りはまさにMap<Boolean, List<T>>。型は一致しコンパイルは通る。
ひっかけ:
partitioningBy は「該当なし側」も空リスト付きで必ず存在する(groupingBy は該当が無いキー自体が生成されない)。m.get(true) が null を返すことは無い、が要点。実機確認の答え合わせ
出力: [2, 4] [1, 3, 5]
公式ドキュメント・関連Collectors.partitioningBy(SE17 API)↗
AIが作成し、独立した検証を経た解説です(有資格者による監修は経ていません)