for循环

  1. import com.google.common.base.Function;
  2. import com.google.common.collect.Maps;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. public class ListToMap {
  8. public static void main(String[] args) {
  9. List<User> userList = new ArrayList<>();
  10. User user1 = new User();
  11. user1.setId(1L);
  12. user1.setAge("12");
  13. User user2 = new User();
  14. user2.setId(2L);
  15. user2.setAge("13");
  16. userList.add(user1);
  17. userList.add(user2);
  18. Map<Long, User> maps = new HashMap<>();
  19. for (User user : userList) {
  20. maps.put(user.getId(), user);
  21. }
  22. System.out.println(maps);
  23. }
  24. public static class User {
  25. private Long id;
  26. private String age;
  27. public Long getId() {
  28. return id;
  29. }
  30. public void setId(Long id) {
  31. this.id = id;
  32. }
  33. public String getAge() {
  34. return age;
  35. }
  36. public void setAge(String age) {
  37. this.age = age;
  38. }
  39. @Override
  40. public String toString() {
  41. return "User{" +
  42. "id=" + id +
  43. ", age='" + age + '\'' +
  44. '}';
  45. }
  46. }
  47. }

使用guava

  1. Map<Long, User> maps = Maps.uniqueIndex(userList, new Function<User, Long>() {
  2. @Override
  3. public Long apply(User user) {
  4. return user.getId();
  5. }
  6. });

使用JDK1.8

  1. Map<Long, User> maps = userList.stream().collect(Collectors.toMap(User::getId,Function.identity()));

看来还是使用JDK 1.8方便一些。另外,转换成map的时候,可能出现key一样的情况,如果不指定一个覆盖规则,上面的代码是会报错的。转成map的时候,最好使用下面的方式:

  1. Map<Long, User> maps = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(), (key1, key2) -> key2));

有时候,希望得到的map的值不是对象,而是对象的某个属性,那么可以用下面的方式:

  1. Map<Long, String> maps = userList.stream().collect(Collectors.toMap(User::getId, User::getAge, (key1, key2) -> key2));