Heim  >  Artikel  >  Java  >  Java 8 – Optional

Java 8 – Optional

巴扎黑
巴扎黑Original
2017-06-23 15:48:291637Durchsuche

本文主要介绍Java 8的 Optional 的简单使用

Adresse

1
1
2
3
4
5
6
7
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Address {
private String province;
private String city;
}
2

3
4

5
6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Test(expected = NoSuchElementException.class)
public void emptyTest() {
// 声明一个空的Optional对象
Optional
nameOptional = Optional.empty();
// java.util.NoSuchElementException: No value present
nameOptional.get();
}
 
@Test(expected = NullPointerException.class)
public void ofNullTest() {
// 依据实例创建Optional对象
Optional.of(new Address("Guangdong", "Zhongshan"));
 
// Optional.ofNullable(null)返回Optional.empty()
assertEquals(Optional.empty(), Optional.ofNullable(null));
// java.lang.NullPointerException
Optional.of(null);
}
7

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Adresse {
privat String-Provinz;
private String-Stadt;
}
of + ofNullable相关代码托管在java8_demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Test(erwartet = NoSuchElementException.class)
public void emptyTest() {
// 声明一个空的Optional对象
Optional
nameOptional = Optional.empty();
// java.util.NoSuchElementException: Kein Wert vorhanden
nameOptional.get();
}
 
@Test(expected = NullPointerException.class)
public void ofNullTest() {
// 依据实例创建Optional对象
Optional.of(new Address("Guangdong", "Zhongshan"));
 // Optional.ofNullable(null)Optional.empty()
assertEquals(Optional.empty( ), Optional.ofNullable(null));
// java.lang.NullPointerException span>
Optional.of(null);
}

Karte

  1. Stream.map Definition: <r> Stream<r> map(Function super T, ? extends R> mapper)</r></r>

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

  3. Die beiden oben genannten Definitionen sind sehr ähnlich, Optional kann als 最多包含一个元素s Stream

Java 8 – Optional angesehen werden

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 Definition: <r> Stream<r> flatMap(Function super T, ? extends Stream extends R>> mapper)</r></r>

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

Java 8 – Optional

1
2
3
4
5
6
7
8
9
10
11
12
@Test
public void flatmapTest() {
String province = "Guangdong";
String city = "Zhongshan";
Optional
addressOptional = Optional.of(new Address(province, city));
// 对于 mapper 为 T -> Optional时,调用Optional.map,生成的是Optional>
Optional> optionalOptional = addressOptional.map(address -> Optional.ofNullable(address.getCity()));
// 对于 mapper 为 T -> Optional时,调用Optional.map,生成的是Optional,被扁平化
Optional stringOptional = addressOptional.flatMap(address -> Optional.ofNullable(address.getCity()));
assertTrue(stringOptional.isPresent());
assertEquals(city, stringOptional.get());
}

Dereferenzierung

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@Test(expected = UnsupportedOperationException.class)
public void dereferenceTest() {
// get:最简单 + 最不安全
Address address = addressOptional.get();
assertNotNull(address);
 
address = null;
Optional
emptyAddressOptional = Optional.ofNullable(address);
 
String defaultValue = "Unknown";
// orElse:设置默认值
Address elseAddress = emptyAddressOptional.orElse(new Address(defaultValue, defaultValue));
assertEquals(defaultValue, elseAddress.getProvince());
assertEquals(defaultValue, elseAddress.getCity());
 
// orElseGet:orElse的延迟调用版本
Address elseGetAddress = emptyAddressOptional.orElseGet(Address::new);
assertNull(elseGetAddress.getProvince());
assertNull(elseGetAddress.getCity());
 
// ifPresent:存在值则运行consumer,否则不进行任何操作
emptyAddressOptional.ifPresent(System.out::println);
 
// orElseThrow:不存在时,抛出异常
emptyAddressOptional.orElseThrow(UnsupportedOperationException::new);
}

Filter

1
2
3
4
@Test
public void filterTest() {
assertTrue(addressOptional.filter(address -> address.getCity().contains("Z")).isPresent());
}

Basistyp + Optional

  1. OptionalInt, OptionalLong, OptionalDouble

  2. hat höchstens 只有一个-Elemente und hat nicht den gleichen Leistungsvorteil wie StreamInt gegenüber Stream<integer></integer>

  3. wird nicht unterstützt map , flatmap , filter

Das obige ist der detaillierte Inhalt vonJava 8 – Optional. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn