1213 14151617 18
@Test(예상 = NoSuchElementException. class)
public void empty Test() {
//빈 Optional 객체 선언
Optional nameOptional = Optional.empty();
|
// java.util.nosucheLementException : 값 없음 값 없음 value restome
nameoptional.get (); } @test (예상 = nullpointerexception.class) public void () {
// 인스턴스 al 객체를 기반으로 옵션 생성
Optional.of( new Address( "Guangdong", "Zhongshan"));
// Optional.ofNullable(null)은 Optional.empty()assertEquals(Optional.empty(), Optional .ofNullable(null));
// java.lang.NullPointerException
Optional을 반환합니다. of(null);}
map
Stream.map 정의: <r> Stream<r> map(함수 super T, ? 확장 R> 매퍼)</r></r> Stream.map 的定义:<r> Stream<r> map(Function super T, ? extends R> mapper)</r></r>
Optional.map 的定义:<u> Optional<u> map(Function super T, ? extends U> mapper)</u></u>
上面两者定义非常类似,Optional 可看成最多包含一个元素 的 Stream
1
2
3
4
5
6
7
8
9
10
11
|
@Test
public void mapTest() {
String province = "Guangdong";
String city = "Zhongshan";
Optional addressOptional = Optional.of(new Address(province, city));
Optional stringOptional = addressOptional.map(Address::getCity);
assertTrue(stringOptional.isPresent());
assertEquals(city, stringOptional.get());
}
|
flatMap
Stream.flatMap 的定义:<r> Stream<r> flatMap(Function super T, ? extends Stream extends R>> mapper)</r></r>
Optional.flatMap 的定义:<u> Optional<u> flatMap(Function super T, Optional<u>> mapper)</u></u></u>
Optional.map 정의: <u> Optional<u> map(Function super T, ? 확장 U> 매퍼)</u></u>
위의 두 가지 중 Optional 은 최대 하나의 요소를 포함하는 Stream 으로 간주될 수 있습니다.
123 4 5678910 |
11
@Testpublic void map 테스트 () {
String Province = "Guangdong";
String city = "Zhongshan";
Optional addressOptional = Optional.of(new Address(province, city));
// mapper : 주소 -> String
Optional stringOptional = addressOptional.map(Address::getCity);assertTrue(stringOptional.isPresent() ) ;assertEquals(city, stringOptional.get());}
|
🎜🎜FlatMap🎜🎜🎜🎜 Stream.FlatMap 정의: <r> R> flatMap(함수> 매퍼)</r> 🎜🎜🎜🎜 Optional.FlatMap 정의: <u> ;U> flatMap(Function<super t optional>> 매퍼)</super></u> 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜1🎜🎜2🎜🎜3🎜🎜4🎜 🎜5🎜 🎜 6 🎜🎜7🎜🎜8🎜🎜9🎜🎜10🎜🎜11🎜🎜12🎜🎜🎜🎜🎜@Test🎜🎜🎜🎜🎜public 🎜void 🎜FlatmapTest🎜 () { 🎜🎜🎜🎜🎜🎜🎜문자열 지방 = 🎜 "Guangdong";🎜🎜🎜String city = 🎜"Zhongshan";🎜🎜🎜Optional addressOptional = Optional.of(🎜new Address(province, city));🎜🎜🎜🎜// 매퍼의 경우 T - > ; Optional, Optional.map이 호출되면 Optional>🎜🎜🎜Optional> optional = addressOptional.map(address -> Optional.ofNullable(address .getCity( )));🎜🎜🎜// 매퍼가 T -> Optional인 경우 Optional.map을 호출하면 평면화된 Optional가 생성됩니다.🎜🎜🎜Optional stringOptional = addressOptional.FlatMap(address - > Optional.ofNullable(address.getCity()));🎜🎜assertTrue(stringOptional.isPresent());🎜🎜assertEquals(city, stringOptional.get());🎜🎜}🎜🎜🎜 🎜🎜ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 11
12
1314 151617181920212223242526
@Test(예상 = UnsupportedOperationException.class)
public void dereferenceTest() {
// get:最简单 + 最不안전
주소 주소 = addressOptional.get(); assertNotNull(주소); |
address = null;
선택 emptyAddressOptional = Optional.ofNullable(address); String defaultValue = "Unknown";// orElse:设置默认值
new Address(기본값) 값, 기본값(기본값) );
assertEquals(defaultValue, elseAddress.getProvince());assertEquals(defaultValue, elseAddress.getCity());
// orElseGet:orElse的延迟调用版本
Ad 드레스 elseGetAddress = 비어있는AddressOptional .orElseGet(주소::new);
assertNull(elseGetAddress.getProvince()); assertNull(elseGetAddress.getCity());
// ifPresent:存재值则运行consumer否则不进行任何操작품
emptyAddressOptional.ifPresent(System.out::println);
// orElseThrow: 不存在时,抛异常
new);
}
filter
123
@Test
| 공개 void filterTest() {
assertTrue(addressOptional.filter(address -> address.getCity().contains( "Z")).isPresent());
}
|
基础类型 + Optional OptionalInt 、OptionalLong 、OptionalDouble 最多只有一个 元素,并没有imageStreamInt 那样상对于 스트림 유성能优势不支持 지도 、 플랫맵 、 필터
|
|