1.key不重复,value不为null
Person p1 = new Person(1, "tom");
Person p2 = new Person(2, "jerry");
Person p3 = new Person(3, "kitty");
List<Person> personList = Arrays.asList(p1, p2, p3);
Map<Integer, String> map = personList.stream().collect(Collectors.toMap(Person::getId, Person::getUsername));
System.out.println(map);
正常的情况下,我们将list转为map,以id为key,name为value,在都没有重复数据的时候,我们打印不会报错
2.key重复问题
Person p1 = new Person(1, "tom");
Person p2 = new Person(1, "jerry");
Person p3 = new Person(3, "kitty");
List<Person> personList = Arrays.asList(p1, p2, p3);
Map<Integer, String> map = personList.stream().collect(Collectors.toMap(Person::getId, Person::getUsername));
System.out.println(map);
id重复了,这次打印则报错了
解决方案
Person p1 = new Person(1, "tom");
Person p2 = new Person(1, "jerry");
Person p3 = new Person(3, "kitty");
List<Person> personList = Arrays.asList(p1, p2, p3);
Map<Integer, String> map = personList.stream().collect(Collectors.toMap(Person::getId, Person::getUsername,(k1,k2) -> k2));
System.out.println(map);
3.value为null
Person p1 = new Person(1, "tom");
Person p2 = new Person(2, "jerry");
Person p3 = new Person(3, null);
List<Person> personList = Arrays.asList(p1, p2, p3);
Map<Integer, String> map = personList.stream().collect(Collectors.toMap(Person::getId, Person::getUsername,(k1,k2) -> k2));
System.out.println(map);
value为null,报错了
解决方案
Person p1 = new Person(1, "tom");
Person p2 = new Person(2, "jerry");
Person p3 = new Person(3, null);
List<Person> personList = Arrays.asList(p1, p2, p3);
Map<Integer, String> map = personList.stream().collect(Collectors.toMap(Person::getId, person -> ObjectUtils.isEmpty(person.getUsername()) ? "" : person.getUsername(),(k1, k2) -> k2));
System.out.println(map);