一、JAVA操作R
<dependency>
<groupId>org.rosuda.REngine</groupId>
<artifactId>Rserve</artifactId>
<version>1.8.1</version>
</dependency>
package com.citydo.faceadd.rserve;
import lombok.extern.slf4j.Slf4j;
import org.rosuda.REngine.Rserve.RConnection;
@Slf4j
public class JavaR {
public static void main(String[] args) {
RConnection recon = null;
try {
recon = new RConnection("127.0.0.1");
recon.eval("m1 = matrix(c(1, 2, 3, 4), 2, 2, byrow=TRUE)");
double[][] m1 = recon.eval("solve(m1)").asDoubleMatrix();
for (int i = 0; i < m1.length; i++) {
for (int j = 0; j < m1[0].length; j++) {
System.out.print(m1[i][j] + "\t");
}
}
} catch (Exception e) {
log.info("与Rserve的连接失败:{}",e);
} finally {
if (recon != null) {
recon.close();
}
}
}
}
二、aviator
<dependency>
<groupId>com.googlecode.aviator</groupId>
<artifactId>aviator</artifactId>
<version>5.1.0</version>
</dependency>
package com.citydo.faceadd.rule;
import com.googlecode.aviator.AviatorEvaluator;
import java.util.HashMap;
import java.util.Map;
public class Aviator {
public static void main(String[] args) {
Long result = (Long) AviatorEvaluator.execute("1*2*3");
System.out.println(result);
Boolean result2 = (Boolean)AviatorEvaluator.execute("3>1 && 2!=4 || true");
System.out.println(result2);
Map env = new HashMap();
env.put("yourname","aviator");
String result3 = (String)AviatorEvaluator.execute(" 'hello ' + yourname ", env);
System.out.println(result3);
String result5=(String)AviatorEvaluator.execute("3>0? 'yes':'no'");
System.out.println(result5);
AviatorEvaluator.execute("string.length('hello')");
AviatorEvaluator.execute("string.contains('hello','h')");
AviatorEvaluator.execute("math.pow(-3,2)");
AviatorEvaluator.execute("math.sqrt(14.0)");
AviatorEvaluator.execute("math.sin(20)");
}
}
三、easy-rules
<dependency>
<groupId>org.jeasy</groupId>
<artifactId>easy-rules-core</artifactId>
<version>4.0.0</version>
</dependency>
package com.citydo.faceadd.rule;
import org.jeasy.rules.annotation.Action;
import org.jeasy.rules.annotation.Condition;
import org.jeasy.rules.annotation.Fact;
import org.jeasy.rules.annotation.Rule;
import org.jeasy.rules.api.Facts;
import org.jeasy.rules.api.Rules;
import org.jeasy.rules.api.RulesEngine;
import org.jeasy.rules.api.RulesEngineParameters;
import org.jeasy.rules.core.DefaultRulesEngine;
public class EasyRules {
@Rule
public static class FizzRule1 {
@Condition
public boolean isFizz1(@Fact("number") Integer number) {
return number == 1;
}
@Action
public void printFizz1() {
System.out.print("--------1---------------");
}
}
@Rule
public static class FizzRule2 {
@Condition
public boolean isFizz2(@Fact("number") Integer number) {
return number == 2;
}
@Action
public void printFizz2() {
System.out.print("------------2------------");
}
}
public static void main(String[] args) {
RulesEngineParameters parameters = new RulesEngineParameters().skipOnFirstAppliedRule(true);
RulesEngine fizzBuzzEngine = new DefaultRulesEngine(parameters);
Rules rules = new Rules();
rules.register(new FizzRule1());
rules.register(new FizzRule2());
Facts facts = new Facts();
facts.put("number", 2);
fizzBuzzEngine.fire(rules, facts);
}
}