Ale*_*Mal 4 java lambda optional consumer java-8
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);
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,结果为57(这是100,20,30,80平均值的正确结果)但是我创建了一个消费者,它应该将结果增加3 ...但它似乎不起作用.
有人能帮我吗?
该Consumer动作实际上正在运行,但您提供的主体仅修改最终丢失的本地实例.该ifPresent()方法应仅用于执行副作用(动作).
如果要对Optional实例持有的值执行计算,请map()改用.
ts1.opt1
.map(x -> x + 3).orElseThrow(...)
Run Code Online (Sandbox Code Playgroud)
get()在Optional实例上使用时要记住要小心.在你决定使用它,看看orElse,orElseGet和orElseThrow.
| 归档时间: |
|
| 查看次数: |
363 次 |
| 最近记录: |