在Java 8中,您可以使用方法引用来过滤流,例如:
Stream<String> s = ...;
long emptyStrings = s.filter(String::isEmpty).count();
Run Code Online (Sandbox Code Playgroud)
有没有办法创建一个方法引用,它是对现有方法的否定,即:
long nonEmptyStrings = s.filter(not(String::isEmpty)).count();
Run Code Online (Sandbox Code Playgroud)
我可以创建not如下所示的方法,但我想知道JDK是否提供了类似的东西.
static <T> Predicate<T> not(Predicate<T> p) { return o -> !p.test(o); }
Run Code Online (Sandbox Code Playgroud) 你能解释一下:
描述性源代码将不胜感激.
这只是一个好奇的问题,我想知道是否有人有一个很好的答案:
在.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
)
Run Code Online (Sandbox Code Playgroud)
他们为什么用Func<TSource, bool>而不是Predicate<TSource>?好像Predicate<TSource>只由List<T>和Array<T>,而Func<TSource, bool>所使用的几乎所有Queryable和Enumerable方法和扩展方法...什么与怎么了?
这是原始问题的简化版本.
我有一个名为Person的类:
public class Person {
public string Name { get; set; }
public int Age { get; set; }
public int Weight { get; set; }
public DateTime FavouriteDay { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
......然后说一个例子:
var bob = new Person {
Name = "Bob",
Age = 30,
Weight = 213,
FavouriteDay = '1/1/2000'
}
Run Code Online (Sandbox Code Playgroud)
我想在我最喜欢的文本编辑器中将以下内容写成字符串 ....
(Person.Age > 3 AND Person.Weight > 50) OR Person.Age < 3
Run Code Online (Sandbox Code Playgroud)
我想取这个字符串和我的对象实例并评估一个TRUE或FALSE - 即在对象实例上评估一个Func <Person,bool>.
这是我目前的想法:
我是使用谓词的新手,刚学会了如何编写:
Predicate<int> pre = delegate(int a){ a %2 == 0 };
Run Code Online (Sandbox Code Playgroud)
谓词将返回什么,以及编程时它如何有用?
我想要一种惯用的方法来查找列表中与谓词匹配的第一个元素.
目前的代码非常难看:
[x for x in seq if predicate(x)][0]
Run Code Online (Sandbox Code Playgroud)
我想过把它改成:
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
Run Code Online (Sandbox Code Playgroud)
但是必须有一些更优雅的东西...... None如果没有找到匹配,如果它返回一个值而不是引发异常会很好.
我知道我可以定义一个函数:
def get_first(predicate, seq):
for i in seq:
if predicate(i): return i
return None
Run Code Online (Sandbox Code Playgroud)
但是开始使用像这样的实用程序函数来填充代码是非常无味的(并且人们可能不会注意到它们已经存在,所以如果存在已经提供相同的内置函数,它们往往会随着时间的推移而重复).
Google Guava有一个始终返回true的谓词.Java 8有类似的东西Predicate吗?我知道我可以使用(foo)->{return true;},但我想要预制的东西,类似于Collections.emptySet().
我正在浏览PredicateJava 中使用的代码.我从来没用过Predicate.有人可以指导我Predicate在Java中的任何教程或概念解释及其实现吗?
我正在为我的第一个应用程序(学习Swift)编写教程:http: //www.appcoda.com/search-bar-tutorial-ios7/
我坚持这部分(Objective-C代码):
- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", searchText];
searchResults = [recipes filteredArrayUsingPredicate:resultPredicate];
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议如何在Swift中为NSPredicate创建一个等价物?
我有一个类型的属性,BOOL我想搜索此属性所在的所有托管对象YES.
对于字符串属性,它很简单.我创建一个这样的谓词:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userName = %@", userName];
Run Code Online (Sandbox Code Playgroud)
但是我该如何做,如果我有一个名为selected的bool属性,我想为此做一个谓词?我可以这样做吗?
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"selected = %@", yesNumber];
Run Code Online (Sandbox Code Playgroud)
或者我是否需要其他格式说明符并且只是通过YES?