List如何转Map的三种做法

List如何转Map

  • 常规做法
  • 使用guava
  • 使用lambda表达式
    • 常规写法
    • 返回实体本身·
    • 使用Function接口中的一个默认方法代替实体,存在key冲突
    • 传入一个合并的函数来解决key冲突问题
    • 指定具体返回的map类型

常规做法

使用创建对像,使用for循环。

使用guava

google提供的guava包

  1. 使用 Maps.uniqueIndex 接口,将返回值作为Key
 List<User> list = new ArrayList<>();
 list.add(new User(1L,"link"));
 list.add(new User(2L,"wangw"));
 list.add(new User(3L,"wangl"));
 Map<Long,User> maps = Maps.uniqueIndex(list.iterator(), new Function<User, Long>() {
     @Override
     public Long apply(User user){
         return user.getId();
     }
 });
 //{1=User{id=1, name='link'}, 2=User{id=2, name='wangw'}, 3=User{id=3, name='wangl'}}
 System.out.println(maps);
 return maps;

2.使用 Maps.asMap接口,与 uniqueIndex 相反,将返回值作为value

 Set<User> set = new HashSet<>();
 set.add(new User(1L,"link"));
 set.add(new User(2L,"wangw"));
 set.add(new User(3L,"wangl"));
 Map<User,Long> longUserMap = Maps.asMap(set, new Function<User, Long>() {
     @Nullable
     @Override
     public Long apply(@Nullable User input) {
         return input.getId();
     }
 });
 //{User{id=3, name='wangl'}=3, User{id=2, name='wangw'}=2, User{id=1, name='link'}=1}
 System.out.println(longUserMap);
 return longUserMap;

使用lambda表达式

常规写法

public static Map<Long,String> listToMapOne(List<Supplier> suppliers){
        Map<Long,String> map = suppliers.stream().collect(Collectors.toMap(Supplier::getId, Supplier::getName));
        return map;
    }

返回实体本身·

Map<Long,Supplier> map = suppliers.stream()
				.collect(Collectors.toMap(Supplier::getId,supplier -> supplier));
return map;

使用Function接口中的一个默认方法代替实体,存在key冲突

Map<Long,Supplier> map = suppliers.stream()
				.collect(Collectors.toMap(Supplier::getId, Function.identity()));
return map;

传入一个合并的函数来解决key冲突问题

Map<Long,Supplier> map = suppliers.stream().collect(
		Collectors.toMap(Supplier::getId,Function.identity(),(k1,k2)->k2));
return map;

指定具体返回的map类型

 LinkedHashMap<Long,Supplier> map = suppliers.stream().collect(
 		Collectors.toMap(Supplier::getId,Function.identity(),
 		(k1,k2) -> k2,LinkedHashMap::new));
return map;

你可能感兴趣的:(java)