我使用属性对列表进行分组。我不知道为什么我会犯错
类型不匹配:无法从Map转换为Map>
打电话给领袖班的时候。我正在使用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公共阶层领袖{
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;}}
发布于 2021-04-15 08:00:28
以下代码执行与代码相同的操作,但将集合分解为多个映射步骤,这可能对您更好:
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中使用一个具有资源的尝试块,这样流才能正确地关闭。
https://stackoverflow.com/questions/67102681
复制相似问题