【问题标题】:Java Convert Map<String,Set<String>> to Map<String, Set<Object1>> [closed]Java 将 Map<String,Set<String>> 转换为 Map<String,Set<Object1>> [关闭]
【发布时间】: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()))); -- 这就是我尝试过的
  • 请编辑您的问题以包含额外的详细信息。注释无法以可读的方式格式化代码

标签: java dictionary stream


【解决方案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())
        ));
    

    【讨论】:

      猜你喜欢
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多