标签: predicate

Java 1.5是否与.Net中的Predicate <T>方法等效?

具体来说,我正在寻找类似干净的符号Collection<T>.TrueForAll/ Exists等.

编写一个foreach循环来检查每个对象上方法的返回感觉很臭,所以我希望有一个更好的Java习语.

.net java collections predicate

8
推荐指数
2
解决办法
4054
查看次数

如何将谓词作为函数参数传递

我有一个类CMyVector,它包含一个指向CMyClass对象的指针向量,我有几个"查找"函数,可以根据不同的标准查找元素.例如,我有:

CMyClass* CMyVector::FindByX(int X);
CMyClass* CMyVector::FindByString(const CString& str);
CMyClass* CMyVector::FindBySomeOtherClass(CSomeOtherClass* ptr);
// Other find functions...
Run Code Online (Sandbox Code Playgroud)

首先,它们被实现为循环,遍历向量,寻找匹配X,str,ptr或其他的元素.所以我创建了谓词,就像这样:

class IsSameX:public unary_function<CMyClass*, bool>
{
    int num;
public:
    IsSameX(int n):num(n){}
    bool operator()(CMyClass* obj) const 
    { 
        return (obj != NULL && (obj->X() == num)); 
    }
};
Run Code Online (Sandbox Code Playgroud)

并以一堆看起来像这样的函数结束:

CMyClass* CMyVector::FindByX( int x )
{
    CMyVector::iterator it = find_if(vec.begin(), vec.end(), IsSameX(x));
    if (it != vec.end())
    {
        return *it;
    }
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

它们看起来都是一样的,除了被调用的谓词,所以我想到了简化更多,并创建了一个像这样的函数:

CMyClass* CMyVector::Find( ThisIsWhatIDontKnow Predicate)
{
    CMyVector::iterator it = find_if(vec.begin(), vec.end(), …
Run Code Online (Sandbox Code Playgroud)

c++ stl predicate vector std

8
推荐指数
1
解决办法
4982
查看次数

在Prolog中谓词名后面斜杠的含义是什么?

我已经读过SO问题斜杠(/)在prolog中做了什么?什么是序言(SWI-Prolog的)谓词"简单/ 1"的含义,但这些链接似乎并没有帮助我.

我正在学习一些关于Prolog的初学者教程.短语喜欢Solve/4Go/1困惑我.这个斜线和数字是什么意思?

predicate prolog

8
推荐指数
1
解决办法
2083
查看次数

Prolog:如何判断谓词是否具有确定性

因此,根据我对确定性谓词的理解:

确定性谓词= 1解

非确定性谓词=多个解决方案

是否有任何类型的规则可以检测谓词是一个还是另一个?喜欢看搜索树等

deterministic predicate prolog

8
推荐指数
1
解决办法
2458
查看次数

如何使用Dqper与Linq

我正在尝试从实体框架转换为Dapper,以期提高数据访问性能.

我使用的查询是谓词形式,如"Expression>".

举个例子:

我有以下代码,我需要转换为使用Dapper.

我目前在做什么:

public async Task<List<TModel>> Get(Expression<Func<TModel, bool>> query)
{
    // this.Context is of type DbContext
    return await this.Context.Set<TModel>().Where(query).ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)

我想做什么:

public async Task<List<TModel>> Get(Expression<Func<TModel, bool>> query)
{
    using (IDbConnection cn = this.GetConnection)
    {
        return await cn.QueryAsync<TModel>(query);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的google-fu让我失望,有人可以帮忙.

编辑:

请注意,我找到了:https: //github.com/ryanwatson/Dapper.Extensions.Linq

但我似乎无法弄清楚如何使用它.

c# linq expression predicate dapper

8
推荐指数
2
解决办法
3万
查看次数

来自函数引用的谓词(布尔类型)

我需要使用基于布尔函数的谓词来组合流操作.通过将方法的参数重新抛出为谓词找到了一种解决方法,如下所示:

public <T> Predicate<T> pred(final Predicate<T> aLambda) {
    return aLambda;
}

public List<String> foo() {
    return new ArrayList<String>().stream() //of course, this does nothing, simplified
            .filter(pred(String::isEmpty).negate())
            .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

'pred'方法似乎无能为力,但不是这样:

public List<String> foo() {
    return new ArrayList<String>().stream() 
            .filter((String::isEmpty).negate()) 
            .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

也没有任何内联转换:

public List<String> foo() {
    return new ArrayList<String>().stream() 
            .filter(((Predicate)String::isEmpty).negate())
            .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

似乎工作.失败了

此表达式的目标类型必须是功能接口

在'pred(...)'方法中,花式转换发生了什么?

java predicate java-8 functional-interface

8
推荐指数
2
解决办法
2461
查看次数

使用Java Predicate和Lambda

为什么以下代码返回Predicate<String>而不是boolean

我的理解是!s.isEmpty()这里的检查是违反谓词boolean test(T t);boolean.这里的返回类型是.

所以在我的lambda中,我的nonEmptyStringPredicate不是类型boolean吗?显然,它不是,我只是想了解它为什么不是.

Predicate<String> nonEmptyStringPredicate = (String s) -> !s.isEmpty();
Run Code Online (Sandbox Code Playgroud)

java lambda predicate java-8 functional-interface

8
推荐指数
2
解决办法
1631
查看次数

Java11中的谓词过滤所有元素

我正在使用Java11.学习一种新的方法Predicate.not,我发现我目前的代码只找到猫科:

List<String> animals = List.of("cat", "leopard", "dog", "lion", "horse");
Predicate<String> cats = a -> !a.equals("dog") && !a.equals("horse");
Set<String> filterCat = animals.stream().filter(cats).collect(Collectors.toSet());
System.out.println(filterCat);
Run Code Online (Sandbox Code Playgroud)

输出是:

豹,猫,狮子

现在我正在尝试使用新方法,输出结果不正确.我该如何纠正?我做错了什么?

我后来的代码:

Predicate<String> updatedCatFilter = Predicate.not(a -> a.equals("dog") && a.equals("horse"));
Set<String> catFamily = animals.stream().filter(updatedCatFilter).collect(Collectors.toSet());
System.out.println(filterCat);
Run Code Online (Sandbox Code Playgroud)

但是现在输出我的所有列表.

马,豹,猫,狗,狮子

java predicate functional-interface java-11

8
推荐指数
1
解决办法
116
查看次数

(谓词<?super String> s)或(String s)

我有一个TreeSet字符串(硬编码).想要检查给定的参数String例如."Person"如果存在于TreeSet中则返回true否则返回false.

在这里我对关于(Predicate<? super String> s)vs 的Eclipse消息感到困惑 (String s):

类型Stream中的方法anyMatch(Predicate)不适用于参数(String)

请指导.

import java.util.Set;
import java.util.TreeSet;
import java.util.function.Predicate;

public class SystemLabelValidator {

    public static boolean ValidateSystemLabel( String s) {  

        String j = s;

        boolean b = false;

        Set <String> SystemLabels = new TreeSet<String>();
        // Unique Strings
        SystemLabels.add("Person");
        SystemLabels.add("Player");
        SystemLabels.add("Hospital");
        SystemLabels.add("Nurse");
        SystemLabels.add("Room");

        System.out.println("\n==> Loop here.");
        for (String temp : SystemLabels) {
            System.out.println(temp);

            if(SystemLabels.stream().anyMatch(j)) {
                System.out.println("I need to return Boolean");
            }
            return b;
        }
        return …
Run Code Online (Sandbox Code Playgroud)

java string predicate java-8 java-stream

8
推荐指数
1
解决办法
272
查看次数

List &lt;String&gt;类型中的get(int)方法不适用于Java 8中的参数字符串

我正在尝试在中搜索元素List<String>,但收到此编译错误:

get(int)类型中的方法List<String>不适用于参数字符串。

这是代码:

private boolean findIdInTheList(List<String> ids, String id) {
    String theId = ids.stream()
            .filter(elem -> id.equals(ids.get(elem)))
            .findAny()
            .orElse(null);
}
Run Code Online (Sandbox Code Playgroud)

java predicate java-8 java-stream

8
推荐指数
1
解决办法
262
查看次数