我有一个列表,我需要自定义排序,然后转换为具有Id与名称映射的地图。
这是我的代码:
Map<Long, String> map = new LinkedHashMap<>();
list.stream().sorted(Comparator.comparing(Building::getName)).forEach(b-> map.put(b.getId(), b.getName()));
我认为这会完成这项工作,但我想知道我是否可以避免在这里创建LinkedHashMap
并使用花哨的函数编程来完成一行中的工作。
答案 0 :(得分:43)
为此目的,你有Collectors.toMap
:
Map<Long, String> map =
list.stream()
.sorted(Comparator.comparing(Building::getName))
.collect(Collectors.toMap(Building::getId,Building::getName));
如果要强制实例化将要实例化的Map实现,请使用:
Map<Long, String> map =
list.stream()
.sorted(Comparator.comparing(Building::getName))
.collect(Collectors.toMap(Building::getId,
Building::getName,
(v1,v2)->v1,
LinkedHashMap::new));
答案 1 :(得分:0)
使用toMap()
java.util.stream.Collectors