首页 > 解决方案 > 使用 Stream() 删除小数点,而不是使用 for 循环

问题描述

我正在尝试在不使用 for 循环的情况下从列表元素中删除小数点。您能否指出一种声明性方法?

List<BigDecimal> numbers = Arrays.asList(new BigDecimal(1.2), new BigDecimal(2.2));
for (int i = 0; i < numbers.size(); i++) {
    BigDecimal number = numbers.get(i);
    numbers.set(i, number.setScale(0, RoundingMode.FLOOR));
}

标签: javalambdajava-8functional-programmingjava-stream

解决方案


您可以使用map

List<BigDecimal> numbers = Stream.of(new BigDecimal(1.2), new BigDecimal(2.2))
    .map(n -> n.setScale(0, RoundingMode.FLOOR))
    .collect(Collectors.toList());

此外,为什么不简单地:

Arrays.asList(new BigDecimal(1.2).setScale(0, RoundingMode.FLOOR, new BigDecimal(2.2).setScale(0, RoundingMode.FLOOR);

推荐阅读