如何使用 Optional 的 ifPresentOrElse return 布尔值?
How can I return a boolean value with Optional's ifPresentOrElse?
有段时间没接触Optional了,有一个疑问
如何使用 Optional 转换下面的 if else 语句?由于 ifPresentOrElse 没有 return 任何东西,它似乎不能 return 真或假。
有什么办法吗?或者像以前一样使用 if else 语句是否正确?
// Using if else statement
if (obj != null) {
// someting to do
return true;
} else {
// someting to do
return false;
}
// Using Optional
Optional.ofNullable(obj)
.ifPresentOrElse(
val -> {
// if obj is not null
// someting to do
// return true
}
, () -> {
// if obj is null
// someting to do
// return false
}
);
如果给你一个Optional
,就去做
return optional.isPresent();
否则没有理由使用Optional
:
return obj != null;
如果你也想要副作用,你可以这样做:
public static void main(String[] args) {
Optional<String> present = Optional.ofNullable("Data");
Optional<String> absent = Optional.empty();
System.out.printf("Value was %s\n", doSomething(present)? "present" : "absent");
System.out.printf("Value was %s\n", doSomething(absent)? "present" : "absent");
}
public static boolean doSomething(Optional<String> opt)
{
opt.ifPresentOrElse(
v -> { System.out.printf("value is '%s'\n",v); },
()-> { System.out.println("value is absent"); }
);
return opt.isPresent();
}
我认为您正试图在无效检查后执行一些代码。你可以简单地做,
`
Optional.ofNullable(obj)
.map(o -> o.doOnNotNull(o))
.orElseGet(() -> doOnNull())
编辑:如果你只想做无效检查和 return boolean
那么你可以简单地使用 Optional.ifPresent()
有段时间没接触Optional了,有一个疑问
如何使用 Optional 转换下面的 if else 语句?由于 ifPresentOrElse 没有 return 任何东西,它似乎不能 return 真或假。
有什么办法吗?或者像以前一样使用 if else 语句是否正确?
// Using if else statement
if (obj != null) {
// someting to do
return true;
} else {
// someting to do
return false;
}
// Using Optional
Optional.ofNullable(obj)
.ifPresentOrElse(
val -> {
// if obj is not null
// someting to do
// return true
}
, () -> {
// if obj is null
// someting to do
// return false
}
);
如果给你一个Optional
,就去做
return optional.isPresent();
否则没有理由使用Optional
:
return obj != null;
如果你也想要副作用,你可以这样做:
public static void main(String[] args) {
Optional<String> present = Optional.ofNullable("Data");
Optional<String> absent = Optional.empty();
System.out.printf("Value was %s\n", doSomething(present)? "present" : "absent");
System.out.printf("Value was %s\n", doSomething(absent)? "present" : "absent");
}
public static boolean doSomething(Optional<String> opt)
{
opt.ifPresentOrElse(
v -> { System.out.printf("value is '%s'\n",v); },
()-> { System.out.println("value is absent"); }
);
return opt.isPresent();
}
我认为您正试图在无效检查后执行一些代码。你可以简单地做, `
Optional.ofNullable(obj)
.map(o -> o.doOnNotNull(o))
.orElseGet(() -> doOnNull())
编辑:如果你只想做无效检查和 return boolean
那么你可以简单地使用 Optional.ifPresent()