gpt4 book ai didi

Java:如何使用函数式编程正确操作 BigDecimal 数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:43:16 28 4
gpt4 key购买 nike

那么,如何使用函数式编程获得此代码的结果:

public static final List<BigDecimal> numbers = Arrays.asList(
new BigDecimal("15"), new BigDecimal("10"), new BigDecimal("17"),
new BigDecimal("30"), new BigDecimal("18"), new BigDecimal("23"),
new BigDecimal("5"), new BigDecimal("12") );

BigDecimal totalOfReducedNumbers = BigDecimal.ZERO;
for(BigDecimal number : numbers) {
if(number.compareTo(BigDecimal.valueOf(20)) > 0)
totalOfReducedNumbers =
totalOfReducedNumbers.add(number.multiply(BigDecimal.valueOf(0.9)));
}
System.out.println("Total of reduced numbers: " + totalOfReducedNumbers);

抛出“减少数字总数:47.7

如何使用 map()、reduce() 等函数式编程工具获得相同的结果?

最佳答案

通过执行相同的操作,首先过滤值(您只需要大于 20 的值)。然后将这些值乘以 0.9,最后通过执行加法来减少项。喜欢,

BigDecimal TWENTY = BigDecimal.valueOf(20);
BigDecimal POINT9 = BigDecimal.valueOf(0.9);
System.out.println("Total of reduced numbers: " + numbers.stream()
.filter(x -> x.compareTo(TWENTY) > 0)
.map(x -> x.multiply(POINT9)).reduce((a, b) -> a.add(b)).get());

输出(按要求)

Total of reduced numbers: 47.7

而且,正如评论中所建议的,我们可以通过方法引用进一步改进,使用 orElse 会比原始 get() 更安全。喜欢,

System.out.println("Total of reduced numbers: " + numbers.stream() 
.filter(x -> x.compareTo(TWENTY) > 0)
.map(x -> x.multiply(POINT9))
.reduce(BigDecimal::add)
.orElse(BigDecimal.ZERO));

关于Java:如何使用函数式编程正确操作 BigDecimal 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638904/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com