【问题标题】:Java List<T> that conditional adds Optional<T>有条件添加 Optional<T> 的 Java List<T>
【发布时间】:2018-12-02 19:20:12
【问题描述】:

是否有提供List&lt;T&gt; 方法的库(例如 Apache、Guava)

void add(Optional<T> element)

如果元素存在则添加元素(如果!element.isPresent() 则为无操作)?显然很容易实现,但这似乎是一件显而易见的事情,似乎有人可能已经做到了。

【问题讨论】:

  • Optional 作为方法参数似乎不被鼓励,因此很可能它没有在流行的库中实现。除此之外,这样做可能更容易element.ifPresent(list::add)
  • list.add(optio) ==> optio.ifPresent(list::add)
  • 如果您满意,您会考虑接受一个答案吗? ;)

标签: java collections java-8 optional


【解决方案1】:

你只需要 list.add(optio) 而不是:

optio.ifPresent(list::add);

例子:

Optional<Integer> optio = Optional.ofNullable(Math.random() > 0.5 ? 52 : null);
List<Integer> list = new ArrayList<>();

optio.ifPresent(list::add);
System.out.println(list);                 //50% of [52], 50% of []

【讨论】:

  • 我个人认为这比CollectionUtil.add(list, optio)更具可读性。 +1
【解决方案2】:

显然很容易实现,但这似乎是一件显而易见的事情 似乎有人已经这样做了。

嗯,有时显而易见的事情是因为它们很简单而被忽略的事情。然而,这不是 Java 标准库中可用的东西,也不会很快看到它,因为 Optionals 旨在用作方法 return types instead of method parameters

此外,“如果此方法可用”,那么它将需要另一个 add 方法重载污染 API,而 @azro 建议这样做很简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 2021-11-26
    • 1970-01-01
    • 2021-08-25
    相关资源
    最近更新 更多