错误:类型不匹配:无法从映射<对象,列表<Object>>转换为映射<字符串,列表<>>



我有一个列表要使用属性进行分组。我不知道为什么我会得到一个错误

类型不匹配:无法从映射转换<对象,列表>映射<字符串,列表<MyClass.Leader>gt;

调用Leader类时。我正在使用Java 8。

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
public class Leader {
String name;
String country;
String age;
String sex;
Leader(String name, String country, String age, String sex) {
this.name = name;
this.country = country;
this.age = age;
this.sex = sex;
}
}

下面的代码与您的代码做相同的事情,但将采集分成多个映射步骤,这可能对您更有效:

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输出可能是:

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是一个字符串流,每行有一个条目。例如读取文件:

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

注意:使用带有Files.lines的try-with-resources块非常重要,这样流才能正确关闭。

相关内容

  • 没有找到相关文章

最新更新