java - 在将 java steam 应用到列表之前对列表进行空检查
问题描述
我有一个下面的代码
item.getSubCategory().stream().map(category -> {
return subCategoriesList.add(new SubCategoryViewModel(
category.get(String.format("_%s",categoryProperties[0])).toString(),
category.get(categoryProperties[2]).toString(),
category.get(categoryProperties[3]).toString()));
}).collect(Collectors.toList());
这item.getSubCategory()
是类别模型的列表。现在,如果 null 出现在getSubCategory
我们会得到一个空指针异常并且不能对其应用蒸汽。在将流应用于列表之前,是否有更好的方法来处理对列表的空检查。
我不想使用IF
语句来检查 null getSubCategory
。java steam API有没有更好的方法?
解决方案
返回列表的方法永远不应该返回null
- 这是一种非常糟糕的做法。只需在构造函数中初始化列表,如果没有添加任何对象,则返回一个空列表。这样,您就可以消除所有需要的空检查,只要您想使用getSubCategory
.
可以说你最终得到了一个占用内存的未使用对象。但是,除非您有很多item
对象,否则拥有一些“备用”列表不会伤害任何人。请记住,在大多数情况下,代码可读性是第一位的——当您看到实际问题时修复性能。
编辑:正如 Holger 所建议的,如果您担心那些空列表的内存成本,您可以使用Collections.emptyList()
. 在您的内部,您item
将所有内容保持原样,仅在需要时创建列表等。但是,在内部getSubCategory
而不是返回null
,您应该检查列表是否已初始化,如果未初始化,则返回Collections.emptyList()
代替 null。根据文档,Collections.emptyList()
返回一个不可变的列表实例,多次调用将返回同一个实例——只会创建一个。
推荐阅读
- python - Pandas 循环精确列迭代
- c++ - cout 在使用 C 的 while 循环后不显示?
- fiware-orion - Orion 上下文代理性能测试
- python - 如何在本地图像上对 python 的 scikit-image 运行椭圆检测?
- javascript - 为什么 jquery 没有设置我的显示 css 值?
- active-directory - 限制 Kerberos TGT 的使用
- c# - C# - 从我添加为项目引用的 NET .dll 文件定义事件
- react-native - React Native 声称我没有正确导入/导出
- visual-studio - 将 Visual Studio 输出更改为 System32 时出现链接器错误
- reactjs - 可排序的标题语义 UI