1、Optional 用法
public class OptionTest {
@Test
public void test() {
OptionDemo optionDemo = new OptionDemo();
optionDemo.setName("張三");
Optional<OptionDemo> optional = Optional.of(optionDemo);
OptionDemo optionDemoNull = null;
Optional<OptionDemo> optional1 = Optional.ofNullable(optionDemoNull);
}
@Test
public void testIsPresent() {
OptionDemo optionDemo = new OptionDemo();
optionDemo.setName("張三");
Optional<OptionDemo> optional = Optional.of(optionDemo);
System.out.println(optional.isPresent());
optional.ifPresent(print -> System.out.println(print));
OptionDemo optionDemoNull = null;
Optional<OptionDemo> optional1 = Optional.ofNullable(optionDemoNull);
System.out.println(optional1.isPresent());
}
@Test
public void testOrElse() {
OptionDemo optionDemo = new OptionDemo();
optionDemo.setName("張三");
Optional<OptionDemo> optional = Optional.of(optionDemo);
System.out.println(optional.orElse(new OptionDemo("默認值不會被打印")));
OptionDemo optionDemoNull = null;
Optional<OptionDemo> optional1 = Optional.ofNullable(optionDemoNull);
System.out.println(optional1.orElse(new OptionDemo("默認值會被打印")));
}
@Test
public void testOrElseGet() {
Optional<OptionDemo> option = Optional.ofNullable(null);
System.out.println(option.orElseGet(() -> new OptionDemo("測試 orElseGet 函數式接口")));
}
@Test
public void whenOrElseGetAndOrElseOverlap_thenCorrect() {
String text = null;
System.out.println("Using orElseGet:");
String defaultText = Optional.ofNullable(text).orElseGet(this::getMyDefault);
System.out.println(defaultText);
System.out.println("Using orElse:");
defaultText = Optional.ofNullable(text).orElse(getMyDefault());
System.out.println(defaultText);
}
@Test
public void whenOrElseGetAndOrElseDiffer_thenCorrect() {
String text = "Text present";
System.out.println("Using orElseGet:");
String defaultText
= Optional.ofNullable(text).orElseGet(this::getMyDefault);
System.out.println(defaultText);
System.out.println("Using orElse:");
defaultText = Optional.ofNullable(text).orElse(getMyDefault());
System.out.println(defaultText);
}
public String getMyDefault() {
System.out.println("Getting Default Value");
return "Default Value";
}
@Test
public void whenOrElseThrowWorks_thenCorrect() {
String nullName = null;
String name = Optional.ofNullable(nullName).orElseThrow(
IllegalArgumentException::new);
System.out.println(name);
}
@Test
public void givenOptionalWithNull_whenGetThrowsException_thenCorrect() {
Optional<String> opt = Optional.ofNullable(null);
String name = opt.get();
}
@Test
public void whenOptionalFilterWorks_thenCorrect() {
Integer year = 2016;
Optional<Integer> yearOptional = Optional.of(year);
boolean is2016 = yearOptional.filter(y -> y == 2016).isPresent();
System.out.println(is2016);
boolean is2017 = yearOptional.filter(y -> y == 2017).isPresent();
System.out.println(is2017);
}
@Test
public void testMap() {
boolean present = Optional.ofNullable(new OptionDemo("我們")).map(OptionDemo::getName).map(s -> s.equals("我們")).isPresent();
System.out.println(present);
}
}
@Data
@Slf4j
@ToString
class OptionDemo {
private String name;
@Contract(pure = true)
public OptionDemo() {
}
@Contract(pure = true)
public OptionDemo(String name) {
this.name = name;
}
}