【问题标题】:How to check if a property of a list is null using a proper approach?如何使用适当的方法检查列表的属性是否为空?
【发布时间】:2021-10-13 11:53:03
【问题描述】:

我的 Java 应用程序中有以下方法:

private void save(final CopyRequest request) {

    if (request.getName() != null) {
        // stuff
    }
}

我通过将方法参数转换为List<CopyRequest>来更新这个方法,如下所示:

private void save(final List<CopyRequest> requestList) {

    if (requestList.getName() != null) {
        // stuff
    }
}

那么,我应该通过requestList.stream().forEach(request -&gt; request.getName == null) 或类似的方式检查名称属性是否为空?

【问题讨论】:

  • 只有当列表中的所有CopyRequest 实例都具有非空name 时,您才想做“东西”,还是您想为每个没有的实例做“东西”?没有name
  • 什么是reqeustList.getName()?除非你使用你自己的List,否则没有这样的方法。

标签: java spring list stream java-stream


【解决方案1】:

嗯,方法取决于您实际想要执行的操作。

第一个选项是 - 当且仅当每个项目都有名称(全有或全无)时才保存列表。

  boolean allWithName = requestList.stream()
      .map(CopyRequest::getName)
      .allMatch(Objects::nonNull);
  if(allWithName){
    // do stuff
  }

第二个选项 - 保存每个具有名称的项目(选择性保存)

   requestList.stream()
      .filter(request -> request.getName() != null) // (1)
      .forEach(this::save); // Note: it is overloaded version for single request

事实上,你甚至可以用(1) 省略过滤,因为重载的版本已经执行了检查

【讨论】:

    【解决方案2】:

    使用 filter 进行 null 检查的细微变化,

    if(requestList != null 
        && requestList.stream()
           .filter(Objects:nonNull)
           .allMatch(request -> request.getName() != null)) {
       // code here
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用Stream#allMatch

      if(requestList != null 
          && requestList.stream().allMatch(request -> request != null 
                  && request.getName() != null)){
      
      }
      

      【讨论】:

        猜你喜欢
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-23
        • 2014-08-22
        • 1970-01-01
        相关资源
        最近更新 更多