通过使用 java 8 流对集合进行排序,将集合转换为 Map

2022-09-02 19:34:19

我有一个列表,我需要自定义排序,然后转换为具有其Id与名称映射的地图。

这是我的代码:

Map<Long, String> map = new LinkedHashMap<>();
list.stream().sorted(Comparator.comparing(Building::getName)).forEach(b-> map.put(b.getId(), b.getName()));

我认为这将完成这项工作,但我想知道我是否可以避免在这里创建并使用花哨的函数式编程在一行中完成工作。LinkedHashMap


答案 1

为此,您必须: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));

答案 2