栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java8 Optional使用整理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java8 Optional使用整理

目录

方法定义

1、获取与封装

2、null值判断处理

3、value处理

使用场景


java.util.Optional

方法定义

1、获取与封装
get获取Optional的value,为null则抛出NoSuchElementException异常

public T get() 

of将value封装为Optional对象,为null则抛出NullPointerException异常public static Optional of(T value)
empty返回空Optional对象public static Optional empty()
ofNullable将value封装为Optional对象,为null则将返回空对象public static Optional ofNullable(T value)

2、null值判断处理
isPresent不为null返回true,否则返回falsepublic boolean isPresent() {
    return value != null;
}
ifPresentvalue不为null则使用该值调用指定的使用者public void ifPresent(Consumer consumer)
orElse若对象的value不为null返回value,否则返回otherpublic T orElse(T other)
orElseGet若对象的value不为null返回value,否则返回other.get()

public T orElseGet(Supplier other)

orElseThrow若对象的value不为null返回value,否则supplier创建的异常public T orElseThrow(Supplier exceptionSupplier)

3、value处理(转换/过滤)
filter如果值存在,返回条件筛选后的Optional对象,否则返回空对象public Optional filter(Predicate predicate)
map如果值存在,就对该值执行提供的mapping函数调用public Optional map(Function mapper)
flatMap如果值存在,就执行flatmap函数
使用场景
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {

    private Long id;
    private String name;
}

场景1:user对象不为空,获取id,为空需要返回0

//之前
Objects.isNull(user.getId()) ? 0L : user.getId();
//替换
Optional.ofNullable(user.getId()).orElse(0L);

场景2:如果user不为空,返回用户ID,为空需要返回0

//之前
if (Objects.nonNull(user)) {
    return user.getId();
} else {
    return 0L;
}

//替换
Optional.ofNullable(user).map(User::getId).orElse(0L);

场景3:如果user不为空,输出用户ID+用户name下划线隔开

//之前
if (Objects.nonNull(user)) {
    System.out.println(user.getId() + "_" + user.getName());
}

//替换
Optional.ofNullable(user).ifPresent(user1 -> System.out.println(user1.getId() + "_" + user1.getName()));

场景4:找一个名叫张三的用户

//之前
List filterUsers = list.stream().filter(user1 -> "张三".equals(user1.getName())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(filterUsers)) {
    User user = filterUsers.get(0);
    System.out.println(user.getId() + "_" + user.getName());
}

//替换
Optional filterUsers = list.stream().filter(user1 -> "张三".equals(user1.getName())).findAny();
if (filterUsers.isPresent()) {
    User user = filterUsers.get();
    System.out.println(user.getId() + "_" + user.getName());
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031309.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号