首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:类型不匹配:无法从Map<Object、List<Object>>转换为Map<String、List<>>

错误:类型不匹配:无法从Map<Object、List<Object>>转换为Map<String、List<>>
EN

Stack Overflow用户
提问于 2021-04-15 05:20:58
回答 1查看 2.1K关注 0票数 0

我使用属性对列表进行分组。我不知道为什么我会犯错

类型不匹配:无法从Map转换为Map>

打电话给领袖班的时候。我正在使用Java 8。

代码语言:javascript
复制
Map<String, List<Leader>> reports = vals.stream()
    .collect(
        Collectors.mapping(val -> val.split("\\|"),
            Collectors.mapping(leaderArgs -> new Reports(leaderArgs[0], leaderArgs[1], leaderArgs[2], leaderArgs[3]),
                Collectors.groupingBy(leader -> leader.country))));

```java

公共阶层领袖{

代码语言:javascript
复制
String name;
代码语言:javascript
复制
String country;
代码语言:javascript
复制
String age;
代码语言:javascript
复制
String sex;
代码语言:javascript
复制
Leader(String name, String country, String age, String sex) {
代码语言:javascript
复制
    this.name = name;
代码语言:javascript
复制
    this.country = country;
代码语言:javascript
复制
    this.age = age;
代码语言:javascript
复制
    this.sex = sex;
代码语言:javascript
复制
}

}

代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-15 08:00:28

以下代码执行与代码相同的操作,但将集合分解为多个映射步骤,这可能对您更好:

代码语言:javascript
复制
Pattern splitPattern = Pattern.compile("\\|");

Map<String, List<Leader>> result =
      vals.stream()
          .map(splitPattern::split)
          .map(leaderArgs -> new Leader(leaderArgs[0], leaderArgs[1], leaderArgs[2], leaderArgs[3]))
          .collect(Collectors.groupingBy(leader -> leader.country));

我还使用了Pattern,这比重复调用String.split要快一些。

这方面的简单XML输出可能是:

代码语言:javascript
复制
result.entrySet()
    .forEach(entry -> {
        System.out.println("<LeaderList country=\"" + entry.getKey() + "\">");

        entry.getValue()
             .forEach(leader -> System.out.println("<Leader name=\"" + leader.name + "\" age=\"" + leader.age + "\" sex=\"" + leader.sex + "\">"));

        System.out.println("</LeaderList>");
    });

收集代码假设输入vals是一个字符串流,每行只有一个条目。例如,要读取文件:

代码语言:javascript
复制
Path path = ... file path

try (Stream<String> vals = Files.lines(path))
  {
    ... the collect code
  }
catch (final IOException ex)
 {
   // TODO error handling
 }

注意:重要的是在Files.lines中使用一个具有资源的尝试块,这样流才能正确地关闭。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67102681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档