这里我们有一个Param对象列表,它基本上有两个属性 - 1.姓名 2.价值
我正在尝试使用stream -
获取具有特定名称的param的值return paramList.stream().filter(param ->
param.getName().equalsIgnoreCase("param_name"))
.findAny()
.map(param -> param.getValue()).get();
但是如果列表中没有名称为“param_name”的Param对象,则此方法会给我NullPointerException。我怎样才能避免它并获得一个空值。
答案 0 :(得分:2)
我认为其中一个getName()
- 调用会抛出NullPointerException
,因为get()
会抛出NoSuchElementException
,如果它是空的并且没有其他可能null
除了paramList
本身之外的其他内容。
获取默认值的一种可能解决方案是,如果找不到param
"param_name"
,请执行以下操作:
paramList.stream()
.filter(Objects::nonNull) // filters out null params
.filter(param -> Objects.nonNull(param.getName())) // filters out params with name null
.filter(param -> param.getName().equalsIgnoreCase("param_name"))
.findAny()
.map(param -> param.getValue()) // or .map(ParamClass::getValue)
.orElse(null); // your default
您可能还想查看Optional
javadoc。
如果您的getName
- 方法比我们实际期望的更多,您可能需要用try/catch
语句包围它。
答案 1 :(得分:1)
您可以过滤那些不存在的选项。像这样的东西
.map(param -> param.getValue())
.filter(Optional::isPresent)
.map(Optional::get)
.findAny()
.orElse("Not Found");