if (opt.isPresent()) {
System.out.println("found");
} else {
System.out.println("Not found");
}
optional
有一个ifPresent()
方法,但我无法链接orelse()
方法。
因此,我不能写:
opt.ifPresent( x -> System.out.println("found " + x))
.orElse( System.out.println("NOT FOUND"));
在回复@assylias时,我认为optional.map()
不适用于以下情况:
opt.map( o -> {
System.out.println("while opt is present...");
o.setProperty(xxx);
dao.update(o);
return null;
}).orElseGet( () -> {
System.out.println("create new obj");
dao.save(new obj);
return null;
});
在这种情况下,当opt
存在时,我将更新其属性并保存到数据库中。当它不可用时,我创建一个新的obj
并保存到数据库中。
注意,在两个lambda中,我必须返回null
。
但是当opt
存在时,两个lambda都将执行。obj
将更新,并将一个新对象保存到数据库中。这是因为第一个lambda中的return null
。并且orelseget()
将继续执行。
对我来说,@Dane White的答案是可以的,首先,我不喜欢使用runnable
但是我找不到任何替代方法。
这里我更喜欢另一个实现:
public class OptionalConsumer<T> {
private Optional<T> optional;
private OptionalConsumer(Optional<T> optional) {
this.optional = optional;
}
public static <T> OptionalConsumer<T> of(Optional<T> optional) {
return new OptionalConsumer<>(optional);
}
public OptionalConsumer<T> ifPresent(Consumer<T> c) {
optional.ifPresent(c);
return this;
}
public OptionalConsumer<T> ifNotPresent(Runnable r) {
if (!optional.isPresent()) {
r.run();
}
return this;
}
}
然后:
Optional<Any> o = Optional.of(...);
OptionalConsumer.of(o).ifPresent(s -> System.out.println("isPresent " + s))
.ifNotPresent(() -> System.out.println("! isPresent"));
public class OptionalConsumer<T> implements Consumer<Optional<T>> {
private final Consumer<T> c;
private final Runnable r;
public OptionalConsumer(Consumer<T> c, Runnable r) {
super();
this.c = c;
this.r = r;
}
public static <T> OptionalConsumer<T> of(Consumer<T> c, Runnable r) {
return new OptionalConsumer(c, r);
}
@Override
public void accept(Optional<T> t) {
if (t.isPresent()) {
c.accept(t.get());
}
else {
r.run();
}
}
Consumer<Optional<Integer>> c = OptionalConsumer.of(
System.out::println,
() -> System.out.println("Not fit")
);
IntStream.range(0, 100)
.boxed()
.map(i -> Optional.of(i)
.filter(j -> j % 2 == 0))
.forEach(c);
在这段新代码中,您有3件事:
顺便说一下,现在它的名称更具有描述性它实际上是消费者的
有什么想法吗?
检查变量的内容是否为数值、大写字母或其他。 if var is type if var is not type 参数 var 变量 名. type 请参阅下面的备注. 备注 受支持的 Type: integer 当 var 非空且包含不带小数点的纯数值字符串 (十进制或十六进制) 时为 true. 允许含有前导和尾随空格和 tab. 字符串可以以加号或减号开始. float 当 var 非空且包含
这可能是一个非常愚蠢的问题,但Java的这句台词是什么意思呢? 我知道它与一个if函数有关,但我试图用if重写它。但我不知道它是怎么工作的。
问题内容: 使用ng-if与值或函数有什么区别吗? 更新(为了更好地理解我为什么要) html js 如果我这样使用,我已经达到了$ digest()迭代 重新更新 (对于chandermani评论) 问题答案: 对于角度都是,它将在当前范围内进行评估。Angular在每个摘要周期执行此操作。 如果您使用的是功能方式,则还有更多的射击方法。可以做 在这种情况下,对每个摘要循环的绑定评估会使您的绑定
主要内容:1 Java8 函数式接口的介绍,2 Java8 函数式接口的案例1,3 Java8 函数式接口的案例2,4 Java8 函数式接口的错误示范,5 Java8 函数式接口的案例3,6 Java8 预定义函数式接口1 Java8 函数式接口的介绍 完全包含一种抽象方法的接口称为函数式接口。函数式接口可以具有任意数量的默认静态方法,但只能包含一个抽象方法。函数式接口还可以声明对象类的方法。 函数式接口也称为单一抽象方法接口或SAM接口。它是Java8 中的新功能,有助于实现函数编程方法。
null null 用console.log在脚本中测试它,这个函数会像预期的那样解决和拒绝。 square.js 但是当我尝试运行下面的jest测试时: square.test.js 我的测试失败,出现以下错误: TypeError:calculateSquare不是函数 你能帮我理解为什么当它是“不是函数”的时候,以及写这些测试的正确方式是什么吗? 提前感谢你的帮助