Java-具有多个字段的收集器嵌套分组依据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java-具有多个字段的收集器嵌套分组依据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1918字,纯文字阅读大概需要3分钟。
内容图文
![Java-具有多个字段的收集器嵌套分组依据](/upload/InfoBanner/zyjiaocheng/650/86480c7767e843808f288c9c6437e091.jpg)
您将如何使用收集器以便在第二级按多个字段分组.例如:
"someList": {
"firstLevelElementX": {
"secondLevelElementW": 2,
"secondLevelElementZ": 3,
"secondLevelElementK": 7
},
"firstLevelElementY": {
"secondLevelElementW": 1,
"secondLevelElementZ": 3,
"secondLevelElementK": 10
}
}
我试图创建一个包含“ secondLevel”元素的类,并按此类分组,但无法使其工作:
@Data
@AllArgsConstructor
public class someClass{
private String firstLevelElement;
private Long secondLevelElementW;
private Long secondLevelElementZ;
private Long secondLevelElementK= 0L;
}
这就是我的方法:
Map<String,Map<String,Long>> someList =
events.stream().collect(
Collectors.groupingBy(
someDAO::getFirstLevelElement,
Collectors.groupingBy(
someClass::getSecondLevelFields,
Collectors.counting())
)
);
有一些建议使用n级分组(使用链)的解决方案,但我更希望使其尽可能不复杂,并且更加整洁.
编辑
为了阐明自己,我将尝试提供一个更好的示例,这是我的清单:
{
"date": "2019-04-08 08:28:01.0",
"source": "maint",
"severity": "HARMLESS",
"site": "USA",
"hostname": "usaHost"
},
{
"date": "2019-04-08 08:28:01.0",
"source": "CPU_Checker",
"severity": "MINOR",
"site": "GERMANY",
"hostname": "germanyHost"
},
{
"date": "2019-04-02 08:28:01.0",
"source": "maint",
"severity": "HARMLESS",
"site": "USA",
"hostname": "anotherUsaHost"
}
我想在第二级上对“源”和“严重性”使用分组依据,因此输出应如下所示:
"eventList": {
"USA": {
"maint": 2,
"HARMLESS": 2
},
"GERMANY": {
"CPU_checker": 1,
"MINOR": 1
}
}
解决方法:
如果可以使用Java 9或更高版本,则可以使用Collectors.flatMapping()来实现:
Map<String, Map<String, Long>> eventList = list.stream()
.collect(Collectors.groupingBy(MyObject::getSite, Collectors.flatMapping(
o -> Stream.of(o.getSource(), o.getSeverity()),
Collectors.groupingBy(Function.identity(), Collectors.counting())
)));
结果将是这样的:
{
USA={maint=2, HARMLESS=2},
GERMANY={CPU_Checker=1, MINOR=1}
}
如果您不能使用Java 9,则可以自己实现flatMapping()函数.您可以看一下Java 9 Collectors.flatMapping rewritten in Java 8,这应该会对您有所帮助.
内容总结
以上是互联网集市为您收集整理的Java-具有多个字段的收集器嵌套分组依据全部内容,希望文章能够帮你解决Java-具有多个字段的收集器嵌套分组依据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。