在Optional中,当调用optional.orElse方法时,无论是否存在元素,orElse部分是否被执行,它都不会表现为if else条件。
在下面的代码中,如果您在案例1中看到,则getNullPoJo和getDefaultPoJo都将执行,因为getNullPoJo将返回空
在情况2中,您将从加载的值(从getLoadedPoJo)获得一个Optional并执行getDefaultPoJo
我只是想了解optional.orElse的工作方式。
public static void main (String [] a) {
PoJo poJo1=getNullPoJo().orElse(getDefaultPoJo());//Case 1
System.out.println("pojo1 Got "+poJo1.getVariable());
PoJo poJo2=getLoadedPoJo().orElse(getDefaultPoJo());//Case 2
System.out.println("pojo2 Got "+poJo2.getVariable());
}
private static Optional<PoJo> getNullPoJo() {
System.out.println("Executing getNullPoJo");
Optional<PoJo> optional=Optional.empty();
return optional;
}
private static Optional<PoJo> getLoadedPoJo() {
System.out.println("Executing getLoadedPoJo");
PoJo poJo =new PoJo();
poJo.setVariable("Loaded");
Optional<PoJo> optional=Optional.of(poJo);
return optional;
}
private static PoJo getDefaultPoJo() {
System.out.println("Executing getDefaultPoJo");
PoJo poJo =new PoJo();
poJo.setVariable("Default");
return poJo;
}
Run Code Online (Sandbox Code Playgroud)
当前输出为:
执行getNullPoJo
执行getDefaultPoJo
pojo1默认
执行getLoadedPoJo
执行getDefaultPoJo …
我已经编写了代码,但事实是,我认为可以有更好的方法来编写以下代码,
这仅在Java 8中必须可行
private User getUser(String userId) {
Optional<User> optionalUser = userDAO.getUserById(userId);
if(optionalUser.isPresent())
return optionalUser.get();
throw new UserDefinedException("User not present");
}
Run Code Online (Sandbox Code Playgroud)
我希望将以上内容写成一行
我无法在期望脚本中转义方括号,示例如下,
我有一个 Question.sh 脚本,如下所示,
#!/bin/bash
echo "Would you like to specify inputs and execute the script? [Y/n]"
read $REPLY
echo "Deleted Item with ID: 50 and do cleanup? [Y/n]"
read $REPLY
echo "Deleted Item with ID: 51 and do cleanup? [Y/n]"
read $REPLY
echo "Deleted Item with ID: 52 and do cleanup? [Y/n]"
read $REPLY
Run Code Online (Sandbox Code Playgroud)
对于上面的问题.sh,我有下面的answer.exp,并使用“expect answer.exp 51”命令执行相同的操作,
#!/usr/bin/expect -f
set timeout -1
spawn ./question.sh
set item "Deleted Item with ID: "
append item [lindex $argv 0]
append …Run Code Online (Sandbox Code Playgroud)