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

时间:2016-02-29 13:52:08

标签: 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 Predicates?

1 个答案:

答案 0 :(得分:15)

Guava谓词的apply方法的方法句柄是一个可用作过滤器的功能接口:

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