通过使用 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));