【问题标题】:Any other better way to handle using Java Stream or Optional.ofNullable使用 Java Stream 或 Optional.ofNullable 处理的任何其他更好的方法
【发布时间】:2020-03-04 11:21:23
【问题描述】:

有时我将[null] 的值设为List<Employee> employees。为了防止我做以下检查

List<Employee> employees ….

if((employees.size()>0 && employees.get(0) == null)) {
    return Lists.newArrayList();
}

想知道上面的代码是否有更好的方法使用流或Optional.ofNullable

【问题讨论】:

  • employers.stream().filter(Objects::NonNull).collect(Collectors.toList(); 应该可以工作。将过滤掉任何非空元素并收集到包含 0 个或更多元素的列表。
  • @DarrenForsythe 但我只需要检查第一个元素,可以说如果我让列表正常,那么它会不必要地迭代所有列表并且什么都不做
  • 我不认为你能得到比你已经拥有的更好的东西。
  • 等一下,你得到null是列表本身还是第一个元素?
  • 当然,还有更好的办法。修复返回包含nullList 的可怕代码。除此之外,这段代码的目的还不清楚。为什么一定要返回一个新的空ArrayList

标签: java java-8 java-stream optional


【解决方案1】:

如果您知道它以这种方式具有值:[null]。你也可以像下面这样检查:

if(employees.contains(null)) {
    return Lists.newArrayList();
}

或者

employees = employees.contains(null) ? List.of() : employees;

【讨论】:

    【解决方案2】:

    你可以只过滤你的列表

    employees.stream() 
    .filter(Objects::nonNull)
    .collect(toList())
    

    【讨论】:

      【解决方案3】:

      由于您只想检查第一个元素,因此可能不需要在此处使用流,例如:

      Optional.ofNullable(employees)
          .filter(es -> !es.isEmpty())
          .filter(es->Objects.nonNull(es.get(0)))
          .orElse(Lists.newArrayList());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-14
        • 2019-10-31
        • 2012-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多