@@ -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