最简单有效的方法是使用终端操作count()
,它将流中的元素数返回为long
,然后转换为BigDecimal
:
stat.setCount_human_dna(getDNACount(dnaSamples));
public static BigDecimal getDNACount(Collection<Sample> dnaSamples) {
long humanSamples = dnaSamples.stream()
.filter(x -> x.getType().equals("Human"))
.count();
return BigDecimal.valueOf(humanSamples);
}
您可以使用reduce()
a终端操作直接从流生成BigDecimal
类型的结果:
stat.setCount_human_dna(getDNACount(dnaSamples));
public static BigDecimal getDNACount(Collection<Sample> dnaSamples) {
return dnaSamples.stream()
.filter(x -> x.getType().equals("Human"))
.reduce(BigDecimal.ZERO,
(total, next) -> total.add(BigDecimal.ONE),
BigDecimal::add);
}
Sidenote:我不是DNA分析等问题的专家,但这种减少的结果总是一个整数.您可以考虑使用BigInteger
而不是BigDecimal
.