在java上调用ispresent的最佳方式可选

ut6juiuv  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(530)

关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。

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;
    }
}

有人能告诉我有没有其他最好的方法?

sycxhyv7

sycxhyv71#

未经检查的演员阵容是你应该尽量避免的。如果您知道您的方法只能处理list<map<string,object>>,那么您的参数应该是这样类型的。
我假设functionlisttomap是一个函数。这样调用它(functionlisttomap.apply())几乎会破坏函数接口的用途。相反,只需将其用作lambda。
在这种情况下,如果没有数据就只想返回null,可以使用orelse():

private Map<String, Map<String, Object>> generateMap(List<Map<String, Object>> list) {
    return Optional.ofNullable(list).map(functionListToMap).orElse(null);
}

如果要在不存在数据的情况下返回空Map,请改用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)。
也可以重写该方法,而不必选择:

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);
    }
}

相关问题