动态if-then代码

时间:2015-04-24 11:49:39

标签: java decision-tree

我使用决策树算法,我得到if-then规则(以文本形式返回),例如:

if(Parameter1 > 10) then
   if(Parameter2< 5) then do A
   else do B
else do C

我想使用这些规则来获得少数项目的决策:item(Parameter1,Parameter2)示例:item1(15,5),item2(10,20),... 问题是,if-then规则是动态的,我想编写一个能够读取这些规则并将它们应用于项目的代码。

1 个答案:

答案 0 :(得分:2)

您可以翻转它并使用Predicates来实现您的测试。例如,

public class GreaterThan implements Predicate<Integer> {
    private final int point;

    public GreaterThan(final int point) {
        this.point = point;
    }

    public boolean test(final Integer incoming) {
        return incoming > point;
    }
}

public class LessThan implements Predicate<Integer> {
  private final int point;

  public LessThan(final int point) {
      this.point = point;
  }

  public boolean test(final Integer incoming) {
    return incoming < point;
  }
}

等等。然后,您可以使用它来动态构建逻辑检查,因为您的测试现在正在运行。

Predicate<Integer> gt10 = new GreaterThan(10);
Predicate<Integer> lt5 = new LessThan(5);

if(gt10.test(Parameter1)) then
    if(lt5.test(Parameter2)) then do A
    else do B
else do C

将A,B和C的执行包裹在功能中,然后您就可以使用灵活的系统了。现在您正在处理功能对象,您可以动态地构建事物 - 而不是上面显示的固定测试,您可以根据需要组合测试和结果。