Java 将 Map<String,Set<String>> 转换为 Map<String,Set<Object1>> [关闭]

Posted

技术标签:

【中文标题】Java 将 Map<String,Set<String>> 转换为 Map<String,Set<Object1>> [关闭]【英文标题】:Java Convert Map<String,Set<String>> to Map<String, Set<Object1>> [closed] 【发布时间】:2021-04-26 00:58:08 【问题描述】:

我想将Map&lt;String,Set&lt;String&gt;&gt; 转换为Map&lt;String, Set&lt;Object1&gt;&gt;

class Object1 
    String name;
 

我试过这种方法,但没有用。

Map<String, Set<Object>> result = map.entrySet().parallelStream()
                .collect(
                Collectors.groupingBy(x -> x.getKey(), 
                        Collectors.mapping(x -> (Set<Object1>)Object1.builder().name(x.getValue()), Collectors.toSet())));

【问题讨论】:

向我们展示其中的一些“各种方法”。也许其中一个几乎是正确的,只需要一点点改变。也许您的方法完全错误,通过看到您的错误尝试,我们将能够解释您的思维过程有什么问题。 Map> 结果 = map.entrySet().parallelStream() .collect( Collectors.groupingBy(x -> x.getKey(), Collectors.mapping(x - > (Set)Object1.builder().name(x.getValue()), Collectors.toSet()))); -- 这就是我尝试过的 请编辑您的问题以包含额外的详细信息。注释无法以可读的方式格式化代码 【参考方案1】:

你几乎明白了。但是您可以将名称字段构造函数添加到您的 Object1 并尝试此代码

map.entrySet().stream()
                .collect(Collectors.toMap(Map.Entry::getKey, 
                        entry -> entry.getValue().stream()
                                .map(Object1::new)
                                .collect(Collectors.toSet())));

【讨论】:

【参考方案2】:

这可以在toMapcollector 的帮助下非常简单地完成:

Map<String, Set<Object1>> newMap = map.entrySet()
    .stream() // or parallelStream()
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        e -> e.getValue()
              .stream()
              .map(s -> Object1.builder().name(s).build())
              .collect(Collectors.toSet())
    ));

【讨论】:

以上是关于Java 将 Map<String,Set<String>> 转换为 Map<String,Set<Object1>> [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Java:如何保存SET 作为HashMap中的值?

java遍历Map

java中set怎么转换成list

java 集合

java--set,Collections,map

java Set接口