我有一个结果列表。我需要找到通过的结果计数。但是列表中的某些项之间存在关系。例如,我有以下列表:
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次。
.5
的数字呢?例如1.6
,它会被视为1
还是2
? - Eugenedouble
作为 ID 看起来很可疑。使用Boolean
而不是boolean
也是如此。您计划支持对其使用null
值吗? - Holger(int) floatValue;
,值为布尔运算 -existingValueIfany && newBooleanValue
。现在您将拥有带有数字和布尔值的K、V对。仅过滤true
值并获取计数。我正在使用移动设备,因此无法输入答案 :( - Karthik R