Java 8引入了Optional类,它是一个容器,可以包含一个可能为null的值,有助于处理值可能存在或不存在的情况,避免空指针异常。以下是如何在Java中使用Optional的简要介绍
1、基本方法使用
package com.lf.java.basic.optional;
import java.util.Optional;
public class OptionalDemo {
public static void main(String[] args) {
//这样可以创建包含指定值的Optional实例。
Optional<String> helloWorld = Optional.of("hello world");
System.out.println(helloWorld.get());
//判断可能不存在的值:
String optionalString = null;
Optional<String> optionalString1 = Optional.ofNullable(optionalString);
if(optionalString1.isPresent()){
System.out.println("存在,todo...");
//存在,todo...
}else{
System.out.println("值不存在,做相应处理!");
//值不存在,做相应处理
}
//使用默认值处理可能不存在的值
String value = optionalString1.orElse("默认值");
System.out.println(value);
//使用默认值处理可能不存在的值
String defaultValue = optionalString1.orElseGet(() -> "default value");
System.out.println(defaultValue);
}
}
运行结果:
hello world
值不存在,做相应处理!
默认值
default value
2、项目中如何使用
package com.lf.java.basic.optional;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@Builder
@ToString
@Data
class GroupDemo {
private String name;
private int age;
private String groupId;
}
public class OptionalService {
public static void main(String[] args) {
//模拟业务逻辑
List<GroupDemo> list = getGroupInfoByGroupId();
List<GroupDemo> groups = Optional.ofNullable(list)
.orElse(new ArrayList<>())
.stream()
.map(item -> {
//自定义业务处理
item.setAge(item.getAge());
return item;
})
//年龄正序排序
// .sorted(Comparator.comparing(GroupDemo::getAge))
//年龄倒序排序
.sorted(Comparator.comparing(GroupDemo::getAge).reversed())
.collect(Collectors.toList());
System.out.println(groups.toString());
}
public static List<GroupDemo> getGroupInfoByGroupId() {
ArrayList<GroupDemo> objects = new ArrayList<>();
int count = 0;
while (count < 5) {
// 循环体
count++;
GroupDemo groupInfo = GroupDemo.builder()
.groupId(String.valueOf(count))
.name("张" + count)
.age((int) (Math.random() * 100))
.build();
objects.add(groupInfo);
}
return objects;
}
}
运行结果:
[GroupDemo(name=张5, age=97, groupId=5), GroupDemo(name=张1, age=89, groupId=1), GroupDemo(name=张4, age=89, groupId=4), GroupDemo(name=张3, age=54, groupId=3), GroupDemo(name=张2, age=20, groupId=2)]