当前位置: 首页 > 知识库问答 >
问题:

如果列表为空[已关闭],如何返回可选对象

田向荣
2023-03-14

需要筛选一个项目列表并检查item.discount()<=0,以防没有找到返回可选对象类型。

这是一个为列表添加值的代码,但我不知道如果列表是空的,如何获得可选对象

Optional<List<Item>> discFit = Optional.of(items
           .stream()
           .filter(item -> item.getDiscount() <= 0)
           .collect(Collectors.toList()));

共有1个答案

郗丰
2023-03-14
Optional<List<Item>> discFit = Optional.of(items
       .stream()
       .filter(item -> item.getDiscount() <= 0)
       .collect(Collectors.toList())).filter(l -> !l.isEmpty());

optional.filter返回谓词匹配的值,否则optional.empty

但是如前所述,很少有理由将列表包装成可选的,因为列表可以是空的,也可以有值(通常返回的列表不是null),并且将列表包装成可选的只会使其更加复杂。

如果您只需要可选 (这更有意义),那么根据您实际想要做的事情,有不同的方法来获得结果。

Optional<Item> discFit = Optional.of(items
       .stream()
       .filter(item -> item.getDiscount() <= 0)
       .findFirst();
 类似资料:
  • 我有一个方法,它接受一个内部有的对象: MatchData k可以是null,有时k.getWatchListDetail()也可以是null。 我需要检查两种情况。首先,如果它能抛出NPE。 上面的实现可以做到这一点,但我尝试使用或带有链接的流,所以我可以在一行链接中完成。

  • 但是如果serviceworkList列表为空,则变量“validate”为false。我知道allMatch的规范,如果list为空,则返回为true。 有什么建议,我可以如何重建流,如果列表列表为空,我会得到假?

  • 我喜欢现在Java标准库中的选项。但有一个基本问题我一直碰到,但我还没想好如何用最好的(最容易读懂、最漂亮、最短的)方法解决: 当选项为空时如何从方法返回? 如果可选项为空,我如何从方法返回,而不必在方法的其余部分中使用,也不必声明额外的变量和额外的块嵌套级别? 或者如果不可能得到所有这些,那么处理这种情况的最佳方法是什么?

  • 是否可以将此代码转换为Java8可选的单行表达式? i、 如果某个对象不是null,我需要调用一个对象方法并返回其结果,否则返回0<代码>可选。不可数()。orElse()不适合,因为它返回相同类型的对象,但我需要方法调用的结果或一些默认值。

  • 我需要的方法,将回报的人与最高的工资。我不能用虚空法。 我尝试过类似的方法,但这不起作用:

  • 到目前为止,我得到了indexOutOfBoundsException错误