如何在使用 Stream 的同时将 Long 转换为 BigDecimal
How to convert Long to BigDecimal while also using a Stream
我正在努力理解如何使以下代码工作。
我的 stat class
的字段 count_human_dna
是 BigDecimal
类型,将类型设置为 Long 可以,但我需要将其更改为 BigDecimal
,能以某种方式告诉我如何使 BigDecimal
字段有效吗?
stat.setCount_human_dna(dnaSamples.stream()
.filter(x -> x.getType().equals("Human"))
.collect(Collectors.counting()));
此代码正在计算属于人类的所有 dnaSamples
。
使用BigDecimal#valueOf
方法从long
转换为BigDecimal
。
stat.setCount_human_dna(BigDecimal.valueOf(dnaSamples.stream().filter(x -> x.getType().equals("Human")).collect(Collectors.counting())));
有关详细信息,请参阅 JavaDocs。
最简单有效的方法是使用终端操作count()
,其中returns流中的元素个数为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()
终端操作直接从流中生成类型 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);
}
旁注:我不是DNA分析等问题的专家,但这种归约的结果永远是一个整数。您可以考虑使用 BigInteger
而不是 BigDecimal
.
我正在努力理解如何使以下代码工作。
我的 stat class
的字段 count_human_dna
是 BigDecimal
类型,将类型设置为 Long 可以,但我需要将其更改为 BigDecimal
,能以某种方式告诉我如何使 BigDecimal
字段有效吗?
stat.setCount_human_dna(dnaSamples.stream()
.filter(x -> x.getType().equals("Human"))
.collect(Collectors.counting()));
此代码正在计算属于人类的所有 dnaSamples
。
使用BigDecimal#valueOf
方法从long
转换为BigDecimal
。
stat.setCount_human_dna(BigDecimal.valueOf(dnaSamples.stream().filter(x -> x.getType().equals("Human")).collect(Collectors.counting())));
有关详细信息,请参阅 JavaDocs。
最简单有效的方法是使用终端操作count()
,其中returns流中的元素个数为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()
终端操作直接从流中生成类型 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);
}
旁注:我不是DNA分析等问题的专家,但这种归约的结果永远是一个整数。您可以考虑使用 BigInteger
而不是 BigDecimal
.