JAVA使用Stream过滤器查询数据列表,空指针异常

时间:2017-08-10 07:49:10

标签: java java-stream

List<Data>data = Datalist.stream()
.filter(o -> o.getX().equals(data.getX()) && 
  o.getY().equals(data.getMwSchemeCode().getY()) && 
  o.getZ().equals(o.getZ()))
.collect(Collectors.toList);

当我运行此代码时,会出现Null指针异常。 我已经尝试将流实体检查为null,尽管它没有用。

1 个答案:

答案 0 :(得分:0)

尝试将您的流调用简化为以下内容:

List<Data> data = datalist.stream()
        .filter(Objects::nonNull)
        .filter(o -> Objects.nonNull(o.getX()) && o.getX().equals(data.getX()))
        .filter(o -> Objects.nonNull(o.getY()) && Objects.nonNull(data.getMwSchemeCode()) && o.getY().equals(data.getMwSchemeCode().getY()))
        .filter(o -> Objects.nonNull(o.getZ()) && o.getZ().eqauls(data.getZ()))
        .collect(Collectors.toList());

关于流的好处是每个流操作都是惰性求值的,这意味着在终止.collect(Collectors.toList())调用时将触发所有操作。将单个巨大的.filter()操作拆分为几个较小的操作会使您的代码更易读,更易于维护。

在这种情况下,我们还要确保每个.getX().getY().getZ()都不会返回任何null以避免NullPointerException