关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。
11天前关门了。
改进这个问题
我有下面的代码,sonar在访问value error之前对其抛出一个检查“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;
}
}
有人能告诉我有没有其他最好的方法?
1条答案
按热度按时间sycxhyv71#
未经检查的演员阵容是你应该尽量避免的。如果您知道您的方法只能处理list<map<string,object>>,那么您的参数应该是这样类型的。
我假设functionlisttomap是一个函数。这样调用它(functionlisttomap.apply())几乎会破坏函数接口的用途。相反,只需将其用作lambda。
在这种情况下,如果没有数据就只想返回null,可以使用orelse():
如果要在不存在数据的情况下返回空Map,请改用orelseget():
与使用orelse(new hashmap<>())的区别在于,对于orelse,每次都示例化另一个对象,而不管是否使用它,而对于orelseget(),只有在需要时才调用supplier(hashmap::new)。
也可以重写该方法,而不必选择:
}
或者,也可以将functionlisttomap重写为一个方法: