在 Java 上调用 isPresent 的最佳方式可选
Best way to call isPresent on Java Optional
我有以下代码,声纳在访问值错误之前检查“Optional#isPresent()”。
private Map<String, Map<String, Object>> generateMap(Object object) {
return Optional.ofNullable((List<Map<String, Object>>) object).map((obj) -> functionListToMap.apply(obj)).get();
}
我试过以下方法来修复错误,但我不确定这是否是最好的编码标准。
private Map<String, Map<String, Object>> generateMap(Object object) {
Optional<List<Map<String, Object>>> result = Optional.ofNullable((List<Map<String, Object>>) object);
if(result.isPresent()) {
return result.map((obj) -> functionListToMap.apply(obj)).get();
}
else {
return null;
}
}
有人可以建议是否有其他最好的方法吗?
未经检查的转换是您应该尽量避免的事情。如果您知道您的方法只能处理 List
我假设 functionListToMap 是一个 Function<>。像那样调用它 (functionListToMap.apply()) 几乎违背了功能接口的目的。相反,只需将其用作 lambda。
在这种情况下,如果没有数据,你只想 return null,你可以使用 orElse():
private Map<String, Map<String, Object>> generateMap(List<Map<String, Object>> list) {
return Optional.ofNullable(list).map(functionListToMap).orElse(null);
}
如果您想要 return 一个空地图,如果没有数据,请改用 orElseGet():
private Map<String, Map<String, Object>> generateMap(List<Map<String, Object>> list) {
return Optional.ofNullable(list).map(functionListToMap).orElseGet(HashMap::new);
}
与orElse(new HashMap<>())的区别在于orElse每次都会实例化另一个对象,不管是否使用,而orElseGet()是Supplier (HashMap::new) 仅在需要时调用。
您也可以不使用 Optional 重写该方法:
private Map<String, Map<String, Object>> generateMap(List<Map<String, Object>> list) {
if (list == null) {
return null;
} else {
return functionListToMap.apply(list);
}
}
或者再次重写 functionListToMap 为方法:
private Map<String, Map<String, Object>> generateMap(List<Map<String, Object>> list) {
if (list == null) {
return null;
} else {
return functionListToMap(list);
}
}
我有以下代码,声纳在访问值错误之前检查“Optional#isPresent()”。
private Map<String, Map<String, Object>> generateMap(Object object) {
return Optional.ofNullable((List<Map<String, Object>>) object).map((obj) -> functionListToMap.apply(obj)).get();
}
我试过以下方法来修复错误,但我不确定这是否是最好的编码标准。
private Map<String, Map<String, Object>> generateMap(Object object) {
Optional<List<Map<String, Object>>> result = Optional.ofNullable((List<Map<String, Object>>) object);
if(result.isPresent()) {
return result.map((obj) -> functionListToMap.apply(obj)).get();
}
else {
return null;
}
}
有人可以建议是否有其他最好的方法吗?
未经检查的转换是您应该尽量避免的事情。如果您知道您的方法只能处理 List
我假设 functionListToMap 是一个 Function<>。像那样调用它 (functionListToMap.apply()) 几乎违背了功能接口的目的。相反,只需将其用作 lambda。
在这种情况下,如果没有数据,你只想 return null,你可以使用 orElse():
private Map<String, Map<String, Object>> generateMap(List<Map<String, Object>> list) {
return Optional.ofNullable(list).map(functionListToMap).orElse(null);
}
如果您想要 return 一个空地图,如果没有数据,请改用 orElseGet():
private Map<String, Map<String, Object>> generateMap(List<Map<String, Object>> list) {
return Optional.ofNullable(list).map(functionListToMap).orElseGet(HashMap::new);
}
与orElse(new HashMap<>())的区别在于orElse每次都会实例化另一个对象,不管是否使用,而orElseGet()是Supplier (HashMap::new) 仅在需要时调用。
您也可以不使用 Optional 重写该方法:
private Map<String, Map<String, Object>> generateMap(List<Map<String, Object>> list) {
if (list == null) {
return null;
} else {
return functionListToMap.apply(list);
}
}
或者再次重写 functionListToMap 为方法:
private Map<String, Map<String, Object>> generateMap(List<Map<String, Object>> list) {
if (list == null) {
return null;
} else {
return functionListToMap(list);
}
}