将List <String>转换为Map <String,List <String >>(以列表值作为映射键),并以空列表Java 8转换映射值

时间:2019-06-17 08:58:36

标签: java collections java-8

这可能是一个愚蠢的问题。我需要使用Java 8将List<String>转换为Map<String, List<String>>。所有列表值("20", "42", "55")应该是创建映射的键,而创建映射的value属性应该为空列表。

尽管以下代码完成了该任务,但它会将列表值保存为地图关键字和地图值的第一个索引。

如何使用Java 8功能解决此问题?

List<String> list = Arrays.asList("20", "42", "55");

Map<String, List<String>> serviceMap =
            list.stream().collect(Collectors.toMap(Function.identity(), Arrays::asList));

2 个答案:

答案 0 :(得分:1)

Arrays::asList作为值映射器传递意味着每个键的值将是一个包含该键作为其单个元素的List,但是您说您希望该值应为空{{ 1}}。

如果该值应为可修改的空List,则应创建一个新的List作为ArrayList的值:

Map

答案 1 :(得分:0)

只需遍历列表中的每个String并将其添加为映射键,然后将一个新的ArrayList作为值,就像这样:

Map<String, List<String> result = Arrays.asList("20", "42", "55").stream()
    .collect(Collectors.toMap(Function.identity(), a -> new ArrayList<String>()));