java - Java 8 - 对列表进行分组并查找计数
问题描述
我有一个结果列表。我需要找到通过的结果计数。但是列表中的某些项目之间存在关系。例如。我有类似的清单
1.0 - false
2.0 - true
3.0 - false
4.0 - true
1.1 - true
3.1 - true
那么通过的计数应该是 2 而不是 4。因为我想根据 id 对列表进行分组(1,1.2,1.3,1.xx 在单个组中)并将其标记为通过,如果组中的所有项目都是经过 。我已经尝试过分组使用groupingBy
,并且得到了我预期行为的地图。我可以迭代地图并获得计数。但我想知道有什么方法可以简单地使用 Java 8 来做到这一点。
public class Main {
static class Resultx {
double id = 1;
Boolean passed = false;
public void setId(double id) {
this.id = id;
}
public double getId() {
return id;
}
public void setAsPassed() {
this.passed = true;
}
public Boolean getPassed() {
return passed;
}
@Override
public String toString() {
return getId() + " - " + getPassed();
}
}
public static void main(String[] args) {
List<Resultx> results = new ArrayList<>();
for (int i = 1; i < 5; i++) {
Resultx result = new Resultx();
result.setId(i);
if (i % 2 == 0) {
result.setAsPassed();
}
results.add(result);
}
for (int i = 1; i < 5; i += 2) {
Resultx result = new Resultx();
result.setId(i + .1);
result.setAsPassed();
results.add(result);
}
System.out.println(results.size());
results.forEach(System.out::println);
System.out.println(results.stream().filter(Resultx::getPassed).count());
System.out.println(results.stream().filter(e -> !e.getPassed()).count());
System.out.println(results.stream().collect(Collectors.groupingBy(r -> (int) (r.getId()))));
}
}
输出
Total count - 6
1.0 - false
2.0 - true
3.0 - false
4.0 - true
1.1 - true
3.1 - true
Total pass count - 4
Total fail count - 2
{1=[1.0 - false, 1.1 - true], 2=[2.0 - true], 3=[3.0 - false, 3.1 - true], 4=[4.0 - true]}
我想要总体通过计数和总体失败计数。这是 2 和 2
解决方案
试试这个
Map<Boolean, Long> collect = results.stream()
.collect(Collectors.groupingBy(r -> (int) (r.getId()))).values()
.stream().map(l -> l.stream().allMatch(p -> p.getPassed()))
.collect(Collectors.partitioningBy(k -> k, Collectors.counting()));
System.out.println(collect);
哪个显示器:
{false=2, true=2}
推荐阅读
- java - 将接收到的统计序列化为 json 文件
- pandas - catplot 问题 Axes 对象
- python - 如何在单元测试中伪造模块?
- javascript - 有没有办法使用js从html文本框中获取文本?
- node.js - PostgreSQL从多对多关系返回数据作为数组
- arduino - ttgo t-beam 和 SPI 解决 SD 卡问题
- javascript - 如何使用 jQuery 隐藏选定选项的某些文本值
- laravel - 如何使用数据透视表十月 Cms 确定结果范围
- grafana - Telegraf inputs.tail 与 zimbra.log
- powershell - 使用 selenium 和 powershell 时出错