Java 8 可选的 asSet()

标签 java guava java-8 option-type

所以我使用 Guava 的 Optional 有一段时间了,现在我正在转向 Java 8,所以我想使用它的 Optional 类,但它没有没有我最喜欢的 Guava 方法:asSet()。有没有办法用我没有看到的 Java 8 Optional 来做到这一点。我喜欢能够将 Optional 视为一个集合,所以我可以这样做:

for (final User u : getUserOptional().asSet()) {
   return u.isPermitted(getPermissionRequired());
}

在某些情况下避免了对额外变量的需要。

例如:

 Optional<User> optUser = getUserOptional();
 if (optUser.isPresent()) {
     return optUser.get().isPermitted(getPermissionRequired());
 }

有没有一种简单的方法可以在 Java 8 的 Optional 中复制 Guava 样式?

谢谢

最佳答案

有一种转换 Optional 的简单方法进入Set .它的工作方式与 Optional 的任何其他转换一样:

给定一个 Optional<T> o你可以调用

o.map(Collections::singleton).orElse(Collections.emptySet())

得到 Set<T> .如果你不喜欢 Collections.emptySet() 的想法在每种情况下都被调用,你可以把它变成一个懒惰的评估:

o.map(Collections::singleton).orElseGet(Collections::emptySet)

但是,该方法太简单了,无法产生性能差异。所以这只是编码风格的问题。

您还可以使用它按预期进行迭代:

for(T t: o.map(Collections::singleton).orElse(Collections.emptySet()))
    // do something with t, may include a return statement

关于Java 8 可选的 asSet(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25219277/

相关文章:

java - 如何显示全息主题的 Activity 圈?

java - java中的精确圆轨道方程

java - 在单个表达式中解包 Guava Optional

java - 如何在 Guava 中将expireAfterAccess与CacheBuilder一起使用

java - 这是按多个属性对项目进行分组并检查另一个属性是否为 null 或不为 null 的有效方法吗?

java - 将 List 转换为 Map 并过滤空键

shell - RHEL5 上的 .sh 脚本出现 "Permission denied"错误

java - Guava :为什么方法 create() 而不是构造函数?

Java8 : How to Convert Map<X, List<Y>> to Map<Y,X> using Stream?

java - 返回具有泛型的对象子类