public class TestSupplier {
Optional<Integer> opt1;
public static void main(String[] args) {
// TODO Auto-generated method stub
TestSupplier ts1 = new TestSupplier();
ts1.opt1 = ts1.average(100,20,30,80);
Consumer<Integer> cns1 = (x) -> x += 3;
ts1.opt1.ifPresent(cns1);
System.out.println(ts1.opt1.get());
}
private Optional<Integer> average(int... n1) {
if (n1.length == 0) return Optional.empty();
int sum = 0;
for(int score: n1) sum += score;
return Optional.of(sum/n1.length);
}
}
当我运行代码时,结果是 57(这是平均 100、20、30、80 的正确结果),但我创建了一个应该将结果递增 3 的消费者...但它似乎不起作用。
有人可以帮助我吗?
最佳答案
Consumer
操作实际上正在运行,但您提供的主体仅修改了最终丢失的本地实例。 ifPresent()
方法应该只用于执行副作用(操作)。
如果要对 Optional
实例持有的值执行计算,请改用 map()
。
ts1.opt1
.map(x -> x + 3).orElseThrow(...)
在 Optional
实例上使用 get()
时请务必小心。在决定使用它之前,请查看 orElse
、orElseGet
和 orElseThrow
。
关于java - 为什么Java的Optional在ifPresent()中不调用Consumer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40419458/