理解、学习与使用 Java 中的 Optional - 张伯雨 - 博客园 (cnblogs.com)
测试类
@Test
void contextLoads4() {
List<Person> people = new ArrayList<>();
System.out.println(people.stream().map(Person::getAge).filter(ele -> ele > 0).count());
Person person = null;
String name = Optional.ofNullable(person)
.map(u -> u.getName()).orElse("name为空"); //如果perso里的name字段的值不为空就直接返回name,否则给name设一个默认值并返回
System.out.println("name====>" + name);
Person person1 = new Person(1, null);
String name1 = Optional.ofNullable(person1)
.map(u -> u.getName()).orElse("name1为空");
System.out.println("name1====>" + name1);
Person person2 = new Person(1, "name2");
String name2 = Optional.ofNullable(person2)
.map(u -> u.getName()).orElse("name2为空");
System.out.println("name2====>" + name2);
Map<String, Object> map = new HashMap<>(); //筛选map里的time的值,如果time的值不为空且不是空字符串就直接返回time的值,否则设time值为null
Object get1 = Optional.ofNullable(map).filter(e -> Objects.nonNull(map.get("time"))).filter(e -> StringUtil.isNotBlank(map.get("time").toString())).map(e -> e.get("time")).orElse(null);
System.out.println("get1====>" + get1);
map.put("time", "0ab1");
Object get2 = Optional.ofNullable(map).filter(e -> Objects.nonNull(map.get("time"))).filter(e -> StringUtil.isNotBlank(map.get("time").toString())).map(e -> e.get("time")).orElse(null);
System.out.println("get2====>" + get2);
map.put("time", "");
Object get3 = Optional.ofNullable(map).filter(e -> Objects.nonNull(map.get("time"))).filter(e -> StringUtil.isNotBlank(map.get("time").toString())).map(e -> e.get("time")).orElse(null);
System.out.println("get3====>" + get3);
}
实体类
package com.example.demo.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class Person {
private Integer id;
private Integer age;
private String name;
private Long updateTime;
private double range;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(Integer age, String name) {
this.age = age;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
public double getRange() {
return range;
}
public void setRange(double range) {
this.range = range;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", age=" + age +
", name='" + name + '\'' +
", updateTime=" + updateTime +
", range=" + range +
'}';
}
}
结果