Java 使用Stream()而不是for循环删除小数点
我试图在不使用for循环的情况下删除列表元素中的小数点。可能 请指出一种声明性的方法Java 使用Stream()而不是for循环删除小数点,java,lambda,java-8,functional-programming,java-stream,Java,Lambda,Java 8,Functional Programming,Java Stream,我试图在不使用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.setSc
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));
}
List number=Arrays.asList(新的BigDecimal(1.2),新的BigDecimal(2.2));
对于(int i=0;i
您可以使用地图
:
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), new BigDecimal(2.2)).stream()
.map(num->num.setScale(0, RoundingMode.FLOOR))
.collect(Collectors.toList());
它和我建议的一样,而不是你的,创建了一个不必要的中间列表。无论如何,你的是更好的
numbers.replaceAll(number->number.setScale(0,RoundingMode.FLOOR))代码>@Holger将其作为答案发布。这是一个完美的答案。这个答案其实很好,谢谢@Holger
Arrays.asList(new BigDecimal(1.2), new BigDecimal(2.2)).stream()
.map(num->num.setScale(0, RoundingMode.FLOOR))
.collect(Collectors.toList());