java - 如何在 java 8 stream api 中使用 guava Predicates 作为过滤器

标签 java collections java-8 guava java-stream

Guava Predicates不能开箱即用作为 java 8 流 API 的过滤器。

例如这是不可能的:

Number first = numbers.stream()
    .filter( com.google.common.base.Predicates.instanceOf(Double.class)))
    .findFirst()
    .get();

如何将 guava 谓词转换为 java 8 谓词,如下所示:

public static <T> Predicate<T> toJava8(com.google.common.base.Predicate<T> guavaPredicate) {
  return (e -> guavaPredicate.apply(e));
}

Number first = numbers.stream()
    .filter( toJava8( instanceOf(Double.class)))
    .findFirst()
    .get();

问题:是否有更优雅的方法在 java 8 中重用 guava 谓词?

最佳答案

Guava 谓词的apply 方法句柄是一个函数式接口(interface),可以用作过滤器:

Number first = numbers.stream()
    .filter(Predicates.instanceOf(Double.class)::apply)
    .findFirst()
    .get();

关于java - 如何在 java 8 stream api 中使用 guava Predicates 作为过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35701317/

相关文章:

java - 我们可以根据 Map 中的键和值对 Set 进行排序吗?

java - 将 Immutable 转换为可变列表 Java,还有其他选择吗?

java - 使用什么 wtpversion 值?

java - 比较方法在使用 Spring Rest Template 时违反了它的一般契约

java - 实现 java.util.Collection<E> 和重写方法时出现问题

Java 8 一对多分组

java - java中的构造函数引用是一种动态绑定(bind)吗?

Java 8 Stream - 对 Collection 中具有相同 id 的对象的操作

java - Postgresql 未使用 JDBC 连接到 android,抛出 org.postgresql.util.PSQLException : The connection attempt failed

java - 创建套接字时出现 SocketTimeOutException,java