>  기사  >  Java  >  자바 8——선택 사항

자바 8——선택 사항

巴扎黑
巴扎黑원래의
2017-06-23 15:48:291621검색

이 글에서는 Java 8的 Optional

@Data

@AllArgsConstructor7
@NoArgsConstructor
public
class
Address {
사설 문자열 지방;
private String city;
}
of + ofNullable 관련 코드는 java8_demo
1
2에서 호스팅됩니다.
3
4
5
6
8

9

1011
12
13
14
15
16
17
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 ofnulltest () {
// 인스턴스 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

  1. 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>

  2. Optional.map的定义:<u> Optional<u> map(Function super T, ? extends U> mapper)</u></u>

  3. 上面两者定义非常类似,Optional可看成最多包含一个元素的 Stream

자바 8——선택 사항

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));
// mapper : Address -> String
// Optional
-> Optional
Optional stringOptional = addressOptional.map(Address::getCity);
assertTrue(stringOptional.isPresent());
assertEquals(city, stringOptional.get());
}

flatMap

  1. Stream.flatMap的定义:<r> Stream<r> flatMap(Function super T, ? extends Stream extends R>> mapper)</r></r>

  2. Optional.flatMap的定义:<u> Optional<u> flatMap(Function super T, Optional<u>> mapper)</u></u></u>

  3. Optional.map 정의: <u> Optional<u> map(Function super T, ? 확장 U> 매퍼)</u></u>

자바 8——선택 사항

위의 두 가지 중 Optional은 최대 하나의 요소를 포함하는 Stream으로 간주될 수 있습니다.
자바 8——선택 사항
1
2
3
4
5
6
7
8
9
10
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());🎜🎜}🎜🎜🎜 🎜🎜ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

1112공개 void
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@Test(예상 = UnsupportedOperationException.class)
public
void
dereferenceTest
() {
// get:最简单 + 最不안전
주소 주소 = addressOptional.get();
assertNotNull(주소);
 
address = null;
선택 emptyAddressOptional = Optional.ofNullable(address); String defaultValue = "Unknown";// orElse:设置默认值
Address elseAddress =emptyAddressOptional.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: 不存在时,抛异常
emptyAddressOptional.orElseThrow(지원되지 않음 edOperationException::new);
}
filter
1
2
3
4
@Test
filterTest

() {

assertTrue(addressOptional.filter(address -> address.getCity().contains(
"Z")).isPresent());
}
基础类型 + Optional
OptionalIntOptionalLongOptionalDouble最多只有一个元素,并没有imageStreamInt 那样상对于 스트림 유성能优势不支持 지도 、 플랫맵 、 필터

위 내용은 자바 8——선택 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.