Skip to content

Commit 53eb531

Browse files
Collectors.toMap处理重复key
1 parent 752a7eb commit 53eb531

1 file changed

Lines changed: 31 additions & 5 deletions

File tree

src/main/java/com/java8/stream/StreamToMap.java

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,47 @@ public class StreamToMap {
1616

1717
public static void main(String[] args) {
1818
toMapTest();
19+
// toMapValueBeanTest();
1920
}
2021

22+
2123
public static void toMapTest() {
24+
List<Worker> list = new ArrayList<>();
25+
list.add(new Worker("123",18,"lin"));
26+
list.add(new Worker("123",18,"li"));
27+
list.add(new Worker("000",18,null));
28+
//如果没有对重复key的处理 (k1,k2)->k2 ,那么key重复时会报错"Duplicate key", 而且value为null时会报错"空指针异常"。
29+
Map<String, String> map = list.stream().collect(Collectors.toMap(Worker::getId, Worker::getName));
30+
for (Map.Entry<String, String> entry : map.entrySet()) {
31+
System.out.println(entry.getKey()+","+entry.getValue());
32+
}
33+
}
34+
35+
public static void toMapTest2() {
2236
List<Worker> list = new ArrayList<>();
2337
list.add(new Worker("123",18,"lin"));
2438
list.add(new Worker("456",28,"chen"));
2539
list.add(new Worker("789",38,"wu"));
26-
//key不可重复,否则会报错"Duplicate key"
27-
// list.add(new Worker("123",18,"li"));
28-
//value不可为null,否则会报错"空指针异常"
29-
// list.add(new Worker("000",18,null));
30-
Map<String, String> map = list.stream().collect(Collectors.toMap(Worker::getId, Worker::getName));
40+
list.add(new Worker("123",18,"li"));
41+
list.add(new Worker("000",18,null));
42+
//(k1,k2)->k2 处理重复key。如果k1和k2相同,就取k2对应的value
43+
Map<String, String> map = list.stream().collect(Collectors.toMap(Worker::getId, Worker::getName, (k1,k2)->k2));
3144
for (Map.Entry<String, String> entry : map.entrySet()) {
3245
System.out.println(entry.getKey()+","+entry.getValue());
3346
}
3447
}
3548

49+
50+
public static void toMapValueBeanTest() {
51+
List<Worker> list = new ArrayList<>();
52+
list.add(new Worker("123",18,"lin"));
53+
list.add(new Worker("456",28,"chen"));
54+
list.add(new Worker("123",18,"li"));
55+
list.add(new Worker("000",18,null));
56+
//value 为对象的map
57+
Map<String, Worker> map = list.stream().collect(Collectors.toMap(Worker::getId, worker -> worker, (k1,k2)->k2));
58+
for (Map.Entry<String, Worker> entry : map.entrySet()) {
59+
System.out.println(entry.getKey()+","+entry.getValue());
60+
}
61+
}
3662
}

0 commit comments

Comments
 (0)