首页 >

Java 8——Optional

Java|java教程Java 8——Optional
Optional,Java
Java-java教程
仿当图网源码PHP,ubuntu主题安装教程,油猴爬虫优势,php var ¥,河南seo教学lzw

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

go语言源码,vscode图标展示不出来,irst安装Ubuntu,tomcat能让外网访问,网络爬虫比例,webftp php,seo建设公司怎么样,php的网站lzw
Address
c实现udp打洞源码,vscode怎么调试控制台,ubuntu源在哪,单tomcat 并发量,爬虫与昆虫,php 抓包工具,信阳seo优化关键词公司,钓鱼网站建设lzw
1
2
3
4
5
6
7
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Address {
private String province;
private String city;
}

of + ofNullable

相关代码托管在java8_demo

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

map

Stream.map的定义: Stream map(Function mapper)

Optional.map的定义: Optional map(Function mapper)

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

Java 8——Optional

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

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

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

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

解引用

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

基础类型 + Optional

OptionalIntOptionalLongOptionalDouble

最多只有一个元素,并没有像StreamInt那样相对于 Stream 有性能优势

不支持 mapflatmapfilter


Java 8——Optional
  • php生成xml文件 请问
  • php生成xml文件 请问 | php生成xml文件 请问 ...

    Java 8——Optional
  • Java优雅的Optional空指针处理
  • Java优雅的Optional空指针处理 | Java优雅的Optional空指针处理 ...

    Java 8——Optional
  • nginx服务器负载均衡配置
  • nginx服务器负载均衡配置 | nginx服务器负载均衡配置 ...

    © 牛的日记 | www.liuzhongwei.com
    网站部分内容来源于网友供稿,若有侵权请联系删除,970928#QQ.com