【问题标题】:Guava: How do I convert Collection<T> to Collection<Optional<T>>?Guava:如何将 Collection<T> 转换为 Collection<Optional<T>>?
【发布时间】:2012-04-03 03:23:19
【问题描述】:

在 Guava 中,如果我有 Collection&lt;T&gt; - Guava 中是否有任何现有功能可以让我轻松地将其转换为 Collection&lt;Optional&lt;T&gt;&gt; ?

【问题讨论】:

  • 在阅读这个问题之前我从来没有听说过 Guava.... 但是通过查看 API 并且我知道 C# 和 Java 还可以,为什么这样的东西不能达到你的目的? Iterables.transform, T>(collection, new Function, Integer>() { @Override public Optional apply(T) { return Optional.of(i); } });
  • 我实际上从来没有用静态方法做过泛型,而且我已经有一段时间没有在方法调用上使用泛型了,一般来说,所以也许我的语法有点不对劲,但就是那种你在找什么?

标签: java collections guava optional


【解决方案1】:

只有正常的方式:

 return Collections.transform(collection, new Function<T, Optional<T>>() {
   public Optional<T> apply(T t) {
     return Optional.of(t);
   }
 }

..尽管使用明确、严格的结构可能会更好。

【讨论】:

  • 谢谢路易斯。我希望这已经存在于某个 API 上,但我错过了它。我会把它添加到我的成长类StuffGuavaIsMissing.java
  • 如果你真的想要它,请提交问题请求,但如果某些事情对我们来说并不常见,我们通常会继续并让你将其添加到你自己的实用程序中,如果您想要,而不是在我们不确定时将其添加到 Guava 中。
  • 注意:Optional.of 可能是 Optional.fromNullable,具体取决于此用户尝试执行的操作。
  • 呵呵,别担心 - 我刚刚被 FunctionalJava 之类的综合 API 宠坏了
  • 我快速浏览了 StuffGuavaIsMissing 以获得灵感。几个注意事项仅供参考:FluentIterable 可能正在获取 transformAndConcat,这与您的 flatTransform 相同。 Iterables.any 看起来与您的存在相同。
猜你喜欢
  • 1970-01-01
  • 2010-10-06
  • 2012-12-09
  • 2016-02-29
  • 2014-11-25
  • 1970-01-01
  • 2021-10-02
  • 2019-10-24
  • 1970-01-01
相关资源
最近更新 更多