在这个特定的例子中,我认为@Tagir 100%正确,将其放入一个过滤器并进行两次检查。我不会使用可选的东西真的是为了返回类型而不是做逻辑......但实际上既不在这里也不在那里。Optional.ofNullable
我想指出,在广泛的情况下,有一个很好的方法,所以你可以这样做:java.util.Objects
cars.stream()
.filter(Objects::nonNull)
这将清除空对象。对于不熟悉的人来说,这是以下内容的简写:
cars.stream()
.filter(car -> Objects.nonNull(car))
要部分回答手头的问题,以返回以下列方式开头的汽车名称列表:"M"
cars.stream()
.filter(car -> Objects.nonNull(car))
.map(car -> car.getName())
.filter(carName -> Objects.nonNull(carName))
.filter(carName -> carName.startsWith("M"))
.collect(Collectors.toList());
一旦你习惯了速记 lambdas,你也可以这样做:
cars.stream()
.filter(Objects::nonNull)
.map(Car::getName) // Assume the class name for car is Car
.filter(Objects::nonNull)
.filter(carName -> carName.startsWith("M"))
.collect(Collectors.toList());
不幸的是,一旦你只返回名字列表,而不是汽车。所以不那么漂亮,但完全回答了这个问题:.map(Car::getName)
cars.stream()
.filter(car -> Objects.nonNull(car))
.filter(car -> Objects.nonNull(car.getName()))
.filter(car -> car.getName().startsWith("M"))
.collect(Collectors.toList());