Maison  >  Article  >  Java  >  Java 8——Facultatif

Java 8——Facultatif

巴扎黑
巴扎黑original
2017-06-23 15:48:291638parcourir

本文主要介绍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
privé Province de chaîne ;
ville de chaîne privée ;
}
of + ofNullable相关代码托管在java8_demo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Test (attendu = NoSuchElementException.class)
public void emptyTest() {
// 声明一个空的Facultatif对象
Facultatif nameOptional = Optionnel.empty();
// java.util.NoSuchElementException : aucune valeur présente
nameOptional.get();
}
 
@Test (attendu = NullPointerException.class)
public void ofNullTest()
// 依据实例创建Facultatif对象
Facultatif.of(nouvelle adresse("Guangdong", "Zhongshan"));
 //Optional.ofNullable(null)返回Optional.empty()
assertEquals(Optional.empty( ), Facultatif.ofNullable(null));
// java.lang.NullPointerException span>
Optional.of(null);
}

carte

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

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

  3. Les deux définitions ci-dessus sont très similaires, Optional peuvent être considérées comme celles de 最多包含一个元素 Stream

Java 8——Facultatif

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

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

Java 8——Facultatif

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());
}

Déréférence

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);
}

filtre

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

Type de base + Facultatif

  1. OptionalInt, OptionalLong, OptionalDouble

  2. contient au plus 只有一个 éléments et n'a pas le même avantage en termes de performances que StreamInt par rapport à Stream<integer></integer>

  3. n'est pas pris en charge map , flatmap , filter

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn