`
bugyun
  • 浏览: 556156 次
社区版块
存档分类
最新评论

aviator 实现 List 的求和、排序、最大、最小值

 
阅读更多

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()) );
	}
}

 

分享到:
评论

相关推荐

    google-aviator.jar

    这是一款由Google开发的开源项目,主要功能是实现动态的、高性能的表达式计算。Aviator的设计理念是提供一个强大的计算引擎,使得开发者可以在运行时动态构建和执行表达式,极大地提升了开发效率。 Aviator的核心...

    Aviator 之规则引擎

    Aviator 是一个开源的Java表达式执行引擎,它主要用于实现复杂的业务逻辑和规则计算。作为一个轻量级的规则引擎,Aviator 提供了一种简洁而强大的方式来处理动态计算和决策过程。本文将深入探讨 Aviator 的核心概念...

    aviator 表达式解析

    Aviator是一个高性能、轻量级的Java语言实现的表达式求值引擎,主要用于各种表达式的动态求值。它的设计目标是轻量级和高性能,相比于Groovy、JRuby等语言,Aviator非常小,即使加上依赖包也只有450K,不加依赖包更...

    aviator-5.1.4-API文档-中文版.zip

    赠送jar包:aviator-5.1.4.jar; 赠送原API文档:aviator-5.1.4-javadoc.jar; 赠送源代码:aviator-5.1.4-sources.jar; 赠送Maven依赖信息文件:aviator-5.1.4.pom; 包含翻译后的API文档:aviator-5.1.4-javadoc-...

    aviator-5.2.6-API文档-中文版.zip

    赠送jar包:aviator-5.2.6.jar; 赠送原API文档:aviator-5.2.6-javadoc.jar; 赠送源代码:aviator-5.2.6-sources.jar; 赠送Maven依赖信息文件:aviator-5.2.6.pom; 包含翻译后的API文档:aviator-5.2.6-javadoc-...

    aviator-5.2.6-API文档-中英对照版.zip

    赠送jar包:aviator-5.2.6.jar; 赠送原API文档:aviator-5.2.6-javadoc.jar; 赠送源代码:aviator-5.2.6-sources.jar; 赠送Maven依赖信息文件:aviator-5.2.6.pom; 包含翻译后的API文档:aviator-5.2.6-javadoc-...

    aviator-5.1.4-API文档-中英对照版.zip

    赠送jar包:aviator-5.1.4.jar; 赠送原API文档:aviator-5.1.4-javadoc.jar; 赠送源代码:aviator-5.1.4-sources.jar; 赠送Maven依赖信息文件:aviator-5.1.4.pom; 包含翻译后的API文档:aviator-5.1.4-javadoc-...

    Aviator 2.3.0

    Aviator是一款开源的轻量级、高性能的表达式求值引擎,主要应用于Java环境中。它设计的目的是为了方便地在程序运行时动态执行复杂的逻辑表达式,为开发者提供了灵活的数据处理能力。Aviator 2.3.0是该库的一个稳定...

    aviator-5.4.1.jar

    set ScriptEngineFactory.getLanguageName return aviator by @qiukeren in #525 Improve class cache performance when class not found by @jiudc in #522 fix: capitalize java bean property names by @killme...

    Aviator-2.3.0用户指南

    Aviator是一款高性能且轻量级的Java实现的表达式求值引擎。尽管市面上已经存在多种用于动态求值的Java表达式引擎,但Aviator以其独特的设计目标——轻量级和高性能——脱颖而出。相较于Groovy或JRuby等更为复杂的...

    aviator-4.1.2.jar

    Aviator——轻量级Java表达式求值引擎,这个是下载下来的jar包,版本是4.1.2

    Aviator是一个高性能java表达式求值程序

    例如,假设我们有一个用户对象,包含姓名(name)和年龄(age)两个属性,我们可以用Aviator表达式来实现年龄大于20的条件判断: ```java AviatorEvaluator.execute("age &gt; 20", user); ``` 如果`user`对象的`age`属性...

    aviator-2.3.2.jar

    非常好用的计算引擎,有非常多的的计算方法满足所需的数学计算

    Java表达式引擎Aviator.zip

    Aviator是一个高性能、轻量级的基于java实现的表达式引擎,它动态地将String类型的表达式编译成Java ByteCode并交给JVM执行。 Aviator支持所有的关系运算符和算术运算符,不支持位运算,同时支持表达式的优先级,...

    aviator-master.zip

    主要是Google放开的java源码,针对java的自定义的表达式实现,比如说实现¥¥¥&&&||||与逻辑或的实现源码,1、进行表达式解析,获取里面的单引号参数,然后解析成表达式入参,2、逻辑运算的加减乘除的实现逻辑,...

    基于java和flink实现实时指标计算功能(源码),开箱即用

    实时风控、实时营销、实时指标大屏等场景的需要大量的实时指标计算需求。...Aviator函数内置实现模块(最大值、最小值、列表、去重集合、有序集合等) aviator-function-impl模块中 自定义函数通过jar加载

    aviator-5.2.6.jar中文-英文对照文档.zip

    注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 ...

    avitator个版本jar包、pdf学习手册

    Aviator是一个强大的Java库,专为高效且轻量级的表达式求值设计。它作为一个表达式解析器和引擎,允许在运行时动态地评估各种复杂的逻辑和计算表达式。这个压缩包包含了从Aviator 2.1版本到3.11版本的jar包,覆盖了...

    aviator-2.2.0-sources.jar

    官方版本,亲测可用

Global site tag (gtag.js) - Google Analytics