**1.
Trùng key ném IllegalStateException.** Bản 2 tham số không có cách xử lý va chạm nên nó ném luôn:
java
Stream.of("a", "bb", "cc")
.collect(Collectors.toMap(String::length, s -> s));
// IllegalStateException: Duplicate key 2 (attempted merging values bb and cc)Sửa bằng tham số thứ ba — merge function — quyết định giữ giá trị nào:
java
.collect(Collectors.toMap(String::length, s -> s, (oldV, newV) -> newV));2. Value null ném NullPointerException. toMap dùng map.merge(...) bên trong, mà merge không nhận value null — khác hẳn HashMap.put(k, null) vốn hợp lệ. Nếu dữ liệu có thể null, lọc trước hoặc gom thủ công bằng forEach + put.
Hai điểm cộng khi trả lời:
- Muốn giữ thứ tự thì truyền tham số thứ tư: Collectors.toMap(k, v, merge, LinkedHashMap::new).
- Nếu mục đích là nhóm chứ không phải map 1-1 thì Collectors.groupingBy mới đúng ngữ nghĩa, không phải toMap kèm merge.