晚上好人,正如标题所说,我的目的是,将一个像!x&&z
这样的布尔运算传递给一个函数,以便我以后可以应用这个操作。计划是将任何布尔运算转移到真值表中。我需要的只是对不同输入的一些递归,一个字符串分析将String转换为boolean,最后将此布尔操作应用于递归。除了字符串分析,我只想尝试对递归应用布尔运算。有没有办法轻松做到这一点?
根据需要,我将包含一些代码:
private static String recursivAequi(boolean[] bools,int id,BoolOp op,BoolOp op2)
{
String values[]=new String[]{"true","false"};
for(String i:values)
{
bools[bools.length-id-1]=Boolean.valueOf(i);
if(id!=0)
{
return recursivAequi(bools,id-1,op,op2);
}
else
{
boolean one=op.TruthValue(bools);
boolean two =op2.TruthValue(bools);
if(one^two)
{
return false+"";
}
}
}
return true+"";
}
所以这个方法将检查,如果两个布尔操作相互之间相等,则为布尔表达式的每个变量插入true和false。我的界面BoolOP现在看起来像这样:public interface BoolOp {
public boolean TruthValue(boolean[] bools);
}
我想通过系统测试这个。我现在的问题是,如何将布尔数组传递给lambda表达式。我这样做了:
System.out.println(recursivAequi(new boolean[2],1,boolarray->boolarray[0]&&boolarray[1],boolarray->boolarray[1]&&boolarray[0]);
所以第一个数组只是一个占位符,其中我的递归函数的true和false值将被放入。在递归函数中有一个中断的id是必要的,下面两个lambdas是我想测试的两个布尔表达式。
希望这有助于理解这个问题。
要实现这一点,您可以为Boolean Operation对象创建一个接口,并且只要您想添加一个接口,就可以使用Lambda Expressions。
public interface BoolOp {
public boolean TruthValue(boolean x, boolean z);
}
...
public void performBoolOp (BoolOp op) {
op.TruthValue(true, true);
}
...
performBoolOp((x, z) -> !x^z);
当您将对象的引用作为BoolOp接口的实例传递时,它必须已实现TruthValue函数,因此您可以这样调用它。
注意:
(x, z) -> !x^z
基本上是相同的,更简洁,如下:
new BoolOp() {
@Override
public boolean TruthValue(boolean x, boolean y) {
return !x^z;
}
};