我有一个对象列表说 car
。我想使用 Java 8 根据某些参数过滤此列表。但是如果参数是 null
,它会抛出 NullPointerException
。如何过滤掉空值?
当前代码如下
requiredCars = cars.stream().filter(c -> c.getName().startsWith("M"));
这抛出 NullPointerException
如果 getName()
返回 null
。
原文由 vaibhavvc1092 发布,翻译遵循 CC BY-SA 4.0 许可协议
在这个特定示例中,我认为@Tagir 是 100% 正确的,将其放入一个过滤器并进行两项检查。我不会使用
Optional.ofNullable
可选的东西实际上是为了返回类型不做逻辑……但实际上既不在这里也不在那里。我想指出
java.util.Objects
在广泛的情况下有一个很好的方法,所以你可以这样做:这将清除您的空对象。对于不熟悉的人,这是以下内容的简写:
要部分回答手头的问题以返回以
"M"
开头的汽车名称列表:一旦你习惯了速记 lambda,你也可以这样做:
不幸的是,一旦你
.map(Car::getName)
你只会返回名字列表,而不是汽车。不那么漂亮但完全回答了这个问题: