java-8 - 从地图获取值时使用 Optional 验证 null
问题描述
我有这条线
List<Integer> someListWithLongName = someMapWithLongName.containsKey(someObjectWithLongName.get())
? someMapWithLongName.get(someObjectWithLongName.get())
: Collections.emptyList();
我想改变它以使其更具可读性,所以我选择了:
List<Integer> someListWithLongName = Optional.of(someMapWithLongName.get(someObjectWithLongName.get())
.orElse(Collections.emptyList())
但是有人告诉我 Optional 的目的是不同的。但是,我不明白为什么。
真的是这样吗?为什么?
解决方案
有些人对此会有不同的看法,但一个好的做法是始终按照预期的方式使用某些东西。
有关滥用Optional<T>
类型的后果,请参阅此答案。
而不是您当前的解决方案,@JB Nizet 暗示的更好的解决方案将从 JDK8 开始使用Map::getOrDefault
。
List<Integer> result = map.getOrDefault(key, Collections.emptyList());
推荐阅读
- python - 执行 pip3 install tslearn 时出错 - 命令“x86_64-linux-gnu-gcc”失败,退出状态为 1
- python - session.commit() 在哪里进行 SELECT 查询 - SQLALchemy,Flask
- spring - Docker-compose 拒绝连接到 localhost
- java - Anagram 检查逻辑错误 - 似乎找不到错误
- jquery - 使用 JSZIP 库创建实时图像 src 的 zip 的问题
- reactjs - 使用 API React Hook 防止多次令牌刷新
- google-chrome-extension - 如何将 Chrome 扩展程序图标添加到 Chrome 网上应用店(新仪表板)
- python - 如何重新分配欧洲街道地址以删除字母/数字
- angular - Angular:防止 api 错误不显示 HTML 模板
- javascript - 阻止表单提交