通过使用 java 8 个流对其进行排序,将集合转换为 Map
Converting a collection to Map by sorting it using java 8 streams
我有一个列表,我需要对其进行自定义排序,然后将其转换为具有 ID 与名称映射的映射。
这是我的代码:
Map<Long, String> map = new LinkedHashMap<>();
list.stream().sorted(Comparator.comparing(Building::getName)).forEach(b-> map.put(b.getId(), b.getName()));
我认为这会完成这项工作,但我想知道我是否可以避免在此处创建 LinkedHashMap
并使用花哨的函数式编程在一行中完成这项工作。
您有 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));
我有一个列表,我需要对其进行自定义排序,然后将其转换为具有 ID 与名称映射的映射。
这是我的代码:
Map<Long, String> map = new LinkedHashMap<>();
list.stream().sorted(Comparator.comparing(Building::getName)).forEach(b-> map.put(b.getId(), b.getName()));
我认为这会完成这项工作,但我想知道我是否可以避免在此处创建 LinkedHashMap
并使用花哨的函数式编程在一行中完成这项工作。
您有 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));