在Java 8中,您可以使用方法引用来过滤stream,例如: Stream<String> s = …; int emptyStrings = s.filter(String::isEmpty).count(); 有没有一种方法来创build一个方法的参考是否定一个现有的,即类似的东西: int nonEmptyStrings = s.filter(not(String::isEmpty)).count(); 我可以创build如下的not方法,但我想知道JDK是否提供了类似的东西。 static <T> Predicate<T> not(Predicate<T> p) { return o -> !p.test(o); }
我正在通过在Java中使用Predicate的代码。 我从来没有使用Predicate 。 有人可以指导我对Predicate任何教程或概念性解释及其在Java中的实现吗?
这只是一个好奇的问题,我想知道如果有人有一个很好的答案: 在.NET Framework类库中,我们有例如这两个方法: public static IQueryable<TSource> Where<TSource>( this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate ) public static IEnumerable<TSource> Where<TSource>( this IEnumerable<TSource> source, Func<TSource, bool> predicate ) 为什么他们使用Func<TSource, bool>而不是Predicate<TSource> ? 似乎Predicate<TSource>仅被List<T>和Array<T> ,而Func<TSource, bool>几乎被所有的Queryable和Enumerable方法和扩展方法使用…这是怎么回事?