标签: predicate

Java:使用Singletons和泛型设计

我正在使用一个名为Predicate的接口,用于筛选集合.例如,我可以定义

public class BlackCatPredicate implements Predicate<Cat> {
  public boolean evaluate( Cat c ) {
       return c.isBlack();
  }
}
Run Code Online (Sandbox Code Playgroud)

然后使用一些实用工具findAll( Collection<T> coll, Predicate<T> pred)方法将谓词应用于Cats的集合,并获得黑色的等等.

我的问题是:我在我的代码中找到黑猫,所以没有必要一遍又一遍地实例化BlackCatPredicate.它应该只有一个实例.(单身?)但是,在编写许多谓词的过程中,我不想将每个谓词都作为单例来实现.那么 - 这里的设计是什么?

java generics singleton predicate

4
推荐指数
1
解决办法
2902
查看次数

谓词<int>匹配问题

我不明白以下代码是如何工作的.具体来说,我不明白使用"return i <3".我希望返回i如果它<小于3.我总是认为返回只返回值.我甚至找不到它的语法.

第二个问题,在我看来,使用匿名方法(委托(int i))但是可以用普通委托指向方法else来编写它吗?谢谢

List<int> listOfInts = new List<int> { 1, 2, 3, 4, 5 };
List<int> result =
    listOfInts.FindAll(delegate(int i) { return i < 3; });
Run Code Online (Sandbox Code Playgroud)

c# syntax predicate anonymous-methods

4
推荐指数
1
解决办法
3483
查看次数

使用类的谓词搜索通用列表 - 比循环更快?

假设我们有一个Class1的通用列表,通常有给定会话的约100个对象.我想看看列表是否有特定的对象.ASP.NET 2.0允许我这样做:

Dim objResult as Class1 = objList.Find(objSearch)
Run Code Online (Sandbox Code Playgroud)

与传统的For循环相比,从性能角度来看,这种方法的速度如何?

如何随着列表长度的增加或减少而变化?

.net generics predicate list

4
推荐指数
1
解决办法
1025
查看次数

System.Predicate <T>:这真的意味着什么,或者它是用于什么?

MSDN定义了System.Predicate 这种方式:

表示定义一组条件的方法,并确定指定的对象是否满足这些条件.

这真的意味着什么,或者它通常用于什么?因为对我来说它只是看起来像一个预定义的delegate,其方法必须采取objecttype T,并返回bool-仅此而已.

我错过了什么吗?

.net c# predicate definition

4
推荐指数
1
解决办法
2104
查看次数

哈希表的等式谓词

作为这项调查的结果,我们知道使用特殊功能(针对某些类型的数据进行了优化)是一个好主意.我想创建一个哈希表,但是这个来源说:

句法:

make-hash-table&key test size rehash-size rehash-threshold => hash-table

论点和价值观:

test - eq,eql,equalequalp函数之一的指示符.默认为eql.

好吧.如果我想在使用字符串并使用时加速我的程序string-equal怎么办?关于其他高阶函数的等式谓词没有限制,但make-hash-table它们是.这是什么原因?

奖金"lisp历史"问题:为什么函数gethash这样命名?为什么不get-hash呢?

lisp comparison hashtable predicate common-lisp

4
推荐指数
1
解决办法
220
查看次数

使用谓词基于另一个数组过滤NSArray

考虑下面的数组.数组包含"Alpha"类型的对象.我们只关心username类型的财产NSString.

NSArray *some_usernames = @[ <multiple values of type Alpha> ]
NSArray *all_usernames = @[ <multiple values of type Alpha> ]
Run Code Online (Sandbox Code Playgroud)

我基本上想要一个不在数组中的所有用户名的列表some_usernames,即

NSArray *remaining_usernames = @[ <all_usernames but not in some_usernames> ];
Run Code Online (Sandbox Code Playgroud)

我打算做的方式是:

NSPredicates *predicates;
for (Alpha *alpha in some_usernames)
{
    predicate = [predicate with @"username != %@", alpha.username];
    predicates.add(predicate)
}

create compound predicate
filter all_usernames
Run Code Online (Sandbox Code Playgroud)

但这感觉就像这样做的坏方法.有两种方法可以做到这一点吗?我以前见过它但我不能再指向代码引用了.

predicate objective-c ios

4
推荐指数
1
解决办法
4161
查看次数

在Java中将谓词作为lambda返回

这个在线教程中,他们使用lambda来过滤用户列表:

List<User> olderUsers = users.stream().filter(u -> u.age > 30).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个接受lambda(u -> u.age > 30部分)的函数,这样我就可以在这个lambda中放入任何我想要的标准.但我有点坚持如何实现这一点.我做了一个空接口Filter,我做了以下方法:

public List<User> filterUsers(Filter f, List<User users>){
    return users.stream().filter(f).collect(Collectors.toList());
}
public Filter olderThan(int age) {
    return u -> u.getAge() > age;
}
Run Code Online (Sandbox Code Playgroud)

但这会产生许多错误.

(我做了一个age领域的吸气剂user).有没有办法调整界面Filter或其他方法使其工作?

java lambda predicate filter java-8

4
推荐指数
1
解决办法
2203
查看次数

通过NSDate过滤Realm中的查询会抛出NSInvalidArgumentException

我到处寻找,甚至用一些永远不会消失的病毒警告信息打到一些可疑的网站,我无法弄清楚这一点.

我只是想Results<T>按日期过滤对象:

let messages = realm.objects(RMChatMessage).filter("timestamp > \(date)) AND (timestamp <= \(to))"))
Run Code Online (Sandbox Code Playgroud)

无论何时运行此行,它都会引发以下情况:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "timestamp > 1970-01-01 00:00:00 +0000"'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010fba8c65 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x000000011174ebb7 objc_exception_throw + 45
    2   Foundation                          0x000000010ffb66bd _qfqp2_performParsing + 8495
    3   Foundation                          0x000000010ffb4526 +[NSPredicate predicateWithFormat:arguments:] + 46
...
Run Code Online (Sandbox Code Playgroud)

我尝试使用NSDateFormatter格式yyyy-MM-dd hh:mm:ss,或者date.description,使用NSPredicate(format:...)而不是Result<T>.filter(...)等等,但没有任何效果.

这是Realm中的一些错误吗?

predicate realm ios swift

4
推荐指数
1
解决办法
2640
查看次数

实现Predicate而不是boolean

当我读到评论时,我正在阅读一个不相关的帖子:任何时候我发现自己需要一个多行lambda,我将这些行移动到私有方法并传递方法引用而不是lambda.

我在问:实现这种行为的正确方法是什么?使用在注释中发布的布尔方法,还是使用谓词?


例如:让我们说我想检查是否Table可用,其中可用的手段isClean,isEmpty,hasChair.

class Table{
    public boolean hasChair(){...}
    public boolean isClean(){...}
    public boolean isEmpty(){...}
}
Run Code Online (Sandbox Code Playgroud)

我可以List<Table> tablesList = Arrays.asList(table1,table2,table3,table4);用两种方式为我的列表实现我的过滤测试:第一个用布尔值:

public boolean isUsable(){
    return hasChair() && isClean() && isEmpty();
}
Run Code Online (Sandbox Code Playgroud)

并使用它 tablesList.stream().filter(Table::isUsable)

第二种方式是谓词:

public Predicate<Table> isUsable(){
    return table -> table.isEmpty() && table.isClean() && table.hasChair();
}
Run Code Online (Sandbox Code Playgroud)

适用于 tablesList.stream().filter(isUsable())


哪个是正确的实施?为什么选择一个而不是其他?有什么大不同吗?

java predicate java-8 java-stream method-reference

4
推荐指数
2
解决办法
146
查看次数

组合两个函数以将它们应用于相同的输入

我是Haskell的新手,但我仍然想尽办法。我正在尝试将两个函数(isMark以及isAlpha来自包中的Data.Char模块base合并Data.Text.filter函数的第一个参数。到目前为止,我尝试过的是:

import qualified Data.Char as C
import qualified Data.Text as T
import           Data.Text (Text)

strippedInput :: Text -> Text
strippedInput input = T.filter (C.isMark || C.isAlpha) input
Run Code Online (Sandbox Code Playgroud)

这不起作用,或者

strippedInput input = T.filter (C.isMark . C.isAlpha) input
Run Code Online (Sandbox Code Playgroud)

但显然它也不管用,因为类型C.isAlphaIS Char -> Bool然后成为一个输入C.isMark,这也是类型Char -> Bool等等类型不匹配。

我想在谓词中实现“ C.isMarkC.isAlpha”逻辑,但是由于我的知识非常有限,我对如何搜索解决方案的想法已经用尽。

text haskell predicate

4
推荐指数
1
解决办法
93
查看次数