jdk build 1.7
IDE: myeclipse
详情见代码和附件:
ICalculateService.java
package com.bugyun.service;
import java.util.List;
import com.bugyun.ErrorCode;
import com.bugyun.exception.CalculateException;
/**
*
* 项目名称:aviator-test
* 类名称:ICalculateService.java
* 类描述:
* 创建人:beyond
* 创建时间:2016-3-31 下午5:29:19
* 修改人:
* 修改时间:
* 修改备注:
* @version
*/
public abstract class ICalculateService {
/**
* @description: 计算集合中的和
* @param strList
* @throws CalculateException
* @return Long
*/
public abstract Long sum(List<Object> strList) throws CalculateException ;
/**
* @description: 对集合进行排序
* @param strList
* @throws CalculateException
* @return List<Object>
*/
public abstract List<Object> sort(List<Object> strList) throws CalculateException ;
/**
* @description: 计算集合中的最大值
* @param list
* @throws CalculateException
* @return int
*/
public int max(List<Object> list) throws CalculateException {
int value ;
try {
value = (Integer) list.get(list.size() - 1);
} catch (Exception e) {
throw new CalculateException(ErrorCode.CALCULATE_MAX);
}
return value ;
}
/**
* @description: 计算集合中的最小值
* @param list
* @throws CalculateException
* @return int
*/
public int min(List<Object> list) throws CalculateException {
int value ;
try {
value = (Integer) list.get(0);
} catch (Exception e) {
throw new CalculateException(ErrorCode.CALCULATE_MIN);
}
return value;
}
}
CalculateImpl.java
package com.bugyun.service.impl;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.bugyun.rule.CalculateRule;
import com.bugyun.service.ICalculateService;
import com.googlecode.aviator.AviatorEvaluator;
public class CalculateImpl extends ICalculateService {
public Long sum(List<Object> strList) {
Map<String,Object> env = new HashMap<String, Object>();
String sumName = CalculateRule.SUM;
env.put(CalculateRule.LIST, strList);
Object result = AviatorEvaluator.execute(sumName, env, true);
return Long.valueOf(result.toString());
}
@Override
public List<Object> sort(List<Object> strList) {
Map<String,Object> env = new HashMap<String, Object>();
env.put(CalculateRule.LIST, strList);
String sortName = CalculateRule.SORT;
Object result = AviatorEvaluator.execute(sortName, env, true);
// Arrays.asList(result) 返回的是一个List<List<Object>>
List<Object> sortList = (List<Object>)Arrays.asList(result).get(0);
return sortList;
}
}
CalculateRule.java
package com.bugyun.rule;
public class CalculateRule {
public final static String LIST = "list";
public final static String SUM = new StringBuilder("reduce(").append(LIST).append(",+,0)").toString() ;
public final static String SORT = new StringBuilder("sort(").append(LIST).append(")").toString() ;
}
CalculateException.java
package com.bugyun.exception;
public class CalculateException extends Exception{
public CalculateException() {
super();
}
public CalculateException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public CalculateException(String message, Throwable cause) {
super(message, cause);
}
public CalculateException(String message) {
super(message);
}
public CalculateException(Throwable cause) {
super(cause);
}
}
ErrorCode.java
package com.bugyun;
/**
* 项目名称:aviator-test
* 类名称:ErrorCode.java
* 类描述:
* 创建人:beyond
* 创建时间:2016-3-31 下午5:28:33
* 修改人:
* 修改时间:
* 修改备注:
* @version
*/
public class ErrorCode {
public final static String CALCULATE_MAX = "90101"; // 规则计算: 最大值失败
public final static String CALCULATE_MIN = "90102"; // 规则计算:最小值失败
public final static String CALCULATE_SUM = "90103"; // 规则计算:求和失败
public final static String CALCULATE_SORT = "90104"; // 规则计算:排序失败
}
CalculateTest.java
package com.bugyun.test;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.bugyun.exception.CalculateException;
import com.bugyun.service.ICalculateService;
import com.bugyun.service.impl.CalculateImpl;
import com.googlecode.aviator.AviatorEvaluator;
/**
* 项目名称:aviator-test
* 类名称:CalculateTest.java
* 类描述:
* 创建人:beyond
* 创建时间:2016-3-31 下午5:30:05
* 修改人:
* 修改时间:
* 修改备注:
* @version
*/
public class CalculateTest {
public static void main(String[] args) throws CalculateException {
List<Object> ints = new ArrayList<Object>();
// 测试集合大小
Long size = 1000000L ;
for(int i=0 ; i<size ; i++){
ints.add(i*2);
}
Collections.shuffle(ints);
// 返回系统当前时间
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(new Date()) +"\n" );
ICalculateService calculate = new CalculateImpl();
List<Object> sortList = calculate.sort(ints);
// System.out.println("==========> sortList : " + sortList);
System.out.println("==========> sortList : " );
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(new Date())+"\n" );
Long sum = (long) calculate.sum(ints);
System.out.println("==========> sum : " + sum);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(new Date()) +"\n" );
Object max = calculate.max(sortList);
System.out.println("==========> max : " + max);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(new Date()) +"\n" );
int min = calculate.min(sortList);
System.out.println("==========> min : " + min);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS").format(new Date()) );
}
}