标签: predicate

是否可以缓存lambda表达式中计算的值?

在以下代码的ContainsIngredients方法中,是否可以缓存p.Ingredients值而不是多次显式引用它?这是我刚熟了用于说明目的相当简单的例子,但我工作的引用代码值深处p如.p.InnerObject.ExpensiveMethod().值

编辑:我正在使用来自http://www.albahari.com/nutshell/predicatebuilder.html的PredicateBuilder

public class IngredientBag
{
    private readonly Dictionary<string, string> _ingredients = new Dictionary<string, string>();

    public void Add(string type, string name)
    {
        _ingredients.Add(type, name);
    }

    public string Get(string type)
    {
        return _ingredients[type];
    }

    public bool Contains(string type)
    {
        return _ingredients.ContainsKey(type);
    }
}

public class Potion
{
    public IngredientBag Ingredients { get; private set;}
    public string Name {get; private set;}        

    public Potion(string name) : this(name, null)
    {

    }

    public Potion(string name, IngredientBag ingredients)
    { …
Run Code Online (Sandbox Code Playgroud)

c# linq lambda predicate

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

NSPredicate导致更新编辑返回NSFetchedResultsChangeDelete而不是NSFetchedResultsChangeUpdate

- (NSFetchedResultsController *)fetchedResultsController从CoreDataBook示例开始以标准方式使用谓词.

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"state=%@ && date >= %@ && date < %@", @"1",fromDate,toDate];
    [fetchRequest setPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)

这工作正常但是在编辑项目时,它返回NSFetchedResultsChangeDelete而不是Update.当主视图返回时,它缺少该项.如果我重新启动模拟器,则不会保存删除并显示正确的编辑结果,谓词正常工作.

case NSFetchedResultsChangeDelete:
 [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
 break;
Run Code Online (Sandbox Code Playgroud)

我可以通过仅注释两个谓词行来确认行为,然后全部工作,因为它应该在编辑和调用NSFetchedResultsChangeUpdate而不是NSFetchedResultsChangeDelete后正确返回完整集.

我已经阅读了http://matteocaldari.it/2009/11/multiple-contexts-controllers-delegates-and-coredata-bug ,他们报告了类似的行为,但我还没有找到解决问题的方法.

predicate core-data

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

从CoreData获取特定的随机行数

我正在使用下面的代码使用符合搜索条件的CoreData获取所有行的查询集:itemType = 1.但我需要做的是从数据中获取特定数量的Random行.例如,我不需要检索列名为dataType = 1的所有100行数据,而是需要随机获取25行dataType = 1.我希望有相对无痛的解决方案.任何帮助表示赞赏.LQ

NSFetchRequest *request = [[NSFetchRequest alloc] init];

[request setEntity:[NSEntityDescription entityForName:@"MyAppName" 
                    inManagedObjectContext:[self managedObjectContext]]];

NSError *error = nil;                                           
NSPredicate *predicate;
NSArray *fetchResults;
predicate = [NSPredicate predicateWithFormat:@"(itemType = %i)", 1];            
[request setPredicate:predicate];
fetchResults = [managedObjectContext executeFetchRequest:request error:&error];

if (!fetchResults) {
        // NSLog(@"no fetch results error %@", error);
}

self.mutableArrayName = [NSMutableArray arrayWithArray:fetchResults];
[request release];
Run Code Online (Sandbox Code Playgroud)

iphone xcode predicate core-data fetch

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

LISP中宏的谓词是什么

如果符号代表lisp中的宏,有人会知道测试的预测是什么?

lisp macros predicate

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

PredicateBuilder返回零记录

我正在使用PredicateBuilder创建一个动态Where子句来查询DataTable中的数据.我有一个包含我需要搜索的列名和值的字典.我只是迭代字典,如果键匹配列名,则将该键和值添加到谓词.一切似乎工作正常,直到对数据表运行实际查询,我得到零记录:(但如果我用p => p ["年"] =="2010"之类的东西替换动态谓词,我得到记录回来.这是代码:

var objectList = table.AsEnumerable();
Func<DataRow, bool> predicate = GetPredicate(parms, table.Columns);

var list1 = objectList.Where(predicate).ToList();

private static Func<DataRow, bool> GetPredicate(Dictionary <string, string> parms, DataColumnCollection dataColumnCollection)
    {
        var predicate = PredicateBuilder.False<DataRow>();
        foreach (var parm in parms)
        {
            if (dataColumnCollection.Contains(parm.Key))
            {
                var copy = parm;
                predicate = predicate.And(p => p[copy.Key] == copy.Value);
            }
        }
        return predicate.Compile();
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激:)

c# linq predicate where predicatebuilder

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

List <T> .Find(Predicates/Lambda)

有人能告诉我以下3个查找选项之间的差异/优势:

        List<Employee> Employees = new List<Employee>();

        Employee tmp = new Employee();

        tmp.FirstName = "Randy";
        tmp.LastName = "Jones";
        Employees.Add(tmp);

        tmp.FirstName = "David";
        tmp.LastName = "Smith";
        Employees.Add(tmp);

        tmp.FirstName = "Michele";
        tmp.LastName = "Morris";
        Employees.Add(tmp);


        // Find option 1
        Employee eFound1= Employees.Find((Employee emp1) => {return emp1.LastName == "Jones";});

        // Find option 2
        Employee eFound2 = Employees.Find(emp2 => emp2.LastName == "Smith");

        // Find option 3
        Employee eFound3 = Employees.Find(
        delegate(Employee emp3)
        {
                return emp3.LastName == "Morris";
        }
        );
Run Code Online (Sandbox Code Playgroud)

我一直在阅读有关lambdas和谓词的内容(我怀疑它与答案有某种联系),但我不能把它们放在一起.任何启示将不胜感激!

谢谢大卫

c# lambda predicate

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

Java单元测试模拟一个以谓词作为参数的方法

我有两节课:

ClassA {
   public String methodA(String accountId, Predicate<User> predicate) {
      // more code
   }; 
}

ClassB {
  methodB(){
    ClassA objectA = new ClassA();
    objectA.methodA("some id", PredicatesProvider.isUserValid());
    // more code ...
  }
}

class PredicatesProvider {
   static Predicate<User> isUserValid(){
   return (user) -> {
      return  user.isValid();
   }
}
Run Code Online (Sandbox Code Playgroud)

在我的单元测试中,我需要模拟ClassA,所以我使用Mockito的模拟方法,如下所示:

ClassA mockObjectA = Mockito.mock(ClassA.class);
Mockito.when(mockObjectA).methodA("some id", PredicatesProvider.isUserValid()).thenReturn("something");
Run Code Online (Sandbox Code Playgroud)

Mockito无法找到签名匹配.

The java.lang.AssertionError: expected:<PredicatesProvider$$Lambda$5/18242360@815b41f> but was:<PredicatesProvider$$Lambda$5/18242360@5542c4ed>
Run Code Online (Sandbox Code Playgroud)

这是我想要实现的简化版本.我猜这是谓词的equals()函数的问题.知道如何模拟具有谓词参数的方法吗?

谢谢

predicate mockito java-8

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

Utils类中的谓词应该作为常量还是静态方法提供?

最近,我一直在使用谓词和番石榴实用程序.我创建了一个Utils.class,我存储了一些我在代码的不同部分使用的谓词.因此,这个问题已经出现,我们(我和我的同事)没有就此达成一致.

将谓词放在实用程序类中的正确方法或"良好实践方式"是什么?作为用大写字母或静态方法定义它的常量?接下来,我写一个例子:

public final class Utils {

public static final Predicate<Element> IS_SPECIAL = new Predicate<Element>() {
    @Override
    public boolean apply(Element elem) {
        return elem.special;
    }
};


public static Predicate<Element> isSpecial() {
    return new Predicate<Element>() {
        @Override
        public boolean apply(Element elem) {
        return elem.special;
    }}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,番石榴提供了一些预测谓词,它提供了一个返回谓词的方法,但其他的libreries也提供它们作为常量.

java predicate guava

4
推荐指数
3
解决办法
1890
查看次数

Java 8避免了大量的if/else语句

我有一些看起来像这样的东西:

 public boolean isValidObject(SomeObject obj){
    if(obj.getField() == null){
      LOG.error("error code 1");
      return false;
    }
    if(obj.getField().getSize() > 500){
      LOG.error("error code 2");
      return false;
    }
    ......
    if(someCondition()){
     log something
     return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

用lambdas在java 8中编写这个最干净的方法是什么?

java validation lambda predicate

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

如何将谓词作为参数C#传递

如果没有传递谓词,如何将谓词传递给方法,又如何使谓词起作用?我以为也许是这样,但这似乎并不正确。

private bool NoFilter() { return true; }

private List<thing> GetItems(Predicate<thing> filter = new Predicate<thing>(NoFilter))
{
    return rawList.Where(filter).ToList();
}
Run Code Online (Sandbox Code Playgroud)

c# delegates predicate

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