【发布时间】:2017-03-18 02:20:44
【问题描述】:
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 的消费者……但它似乎不起作用。
有人可以帮我吗?
【问题讨论】:
-
"
(x) -> x += 3" 你认为你在那里增加了什么变量? -
n1是一个局部变量,那为什么cns1会影响它的状态呢? -
你想做的是
ts1.opt1.map(x -> x + 3).get()
标签: java lambda java-8 optional consumer