如题所示,在开发过程中看到JDK1.8的两个方法,个人觉得较为实用,以作记录
首先是Map.getOrDefault()方法
源码
default V getOrDefault(Object key, V defaultValue) {
V v;
return (((v = get(key)) != null) || containsKey(key))
? v
: defaultValue;
}
Map集合中有这个key,就使用这个key对应的value值,如果没有该key就使用默认值defaultValue
举例代码
Map<String, String> map = new HashMap<>();
map.put("province", "四川");
map.put("city","成都");
map.put("area","高新区");
String s1 = map.getOrDefault("province", "陕西");
System.out.println(s1);
String s2 = map.getOrDefault("text", "默认值");
System.out.println(s2);
其次是Optional.ofNullable()方法
源码
private static final Optional<?> EMPTY = new Optional<>();
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
- 首先执行ofNullable(),如果T对象为空执行empty()方法;不为空执行of(value)方法;
- empty()初始化一个空对象Optional(此处注意空对象和null是不同的);
- of(value)方法,将泛型对象T用于Optional构造方法的参数上,返回一个有值的对象;
- 经过上面两步保证了Optional不为null,避免了空指针。
List list = null;
Optional.ofNullable(list).orElse(new ArrayList()).forEach(e -> System.out.println(e.toString()));
|