gpt4 book ai didi

Java 评估字符串作为表达式或代码执行

转载 作者:行者123 更新时间:2023-11-30 06:01:10 25 4
gpt4 key购买 nike

比如说,我有一个 Emp 对象列表,其中包含名称、年龄和薪水属性。

List<Emp> empObj = readEmpDetails();

从数据库中保留过滤条件或从平面文件中读取。但是语法如下格式。

name contains mike
age gt 100

如何将上述条件列表转换为 java 表达式。需要针对我们从数据库源读取的 empObj 执行此条件。我怎样才能做到这一点 ?请分享您的经验。

最佳答案

您可以使用 Spring Spel (org.springframework.expression.ExpressionParser):

public static void main(String[] args) {
List<Emp> emp = Arrays.asList(new Emp("Ann", 25, 1000L)
,new Emp("John", 40, 2000L)
,new Emp("Alex", 60, 3000L));
ExpressionParser parser = new SpelExpressionParser();

Expression exp = parser.parseExpression("age gt 30");


emp.stream()
.filter(emp1 -> exp.getValue(emp1, Boolean.class))
.forEach(emp1 -> System.out.println(emp1.getName() + " " + emp1.getAge()));
}

输出:

John 40
Alex 60

文字和操作的类型是:

  • 文字:
    • 文本字面量:“一个文本”、“另一个文本!”……
    • 数字文字:0、34、3.0、12.3,...
    • boolean 字面量:true、false
    • 空字面量:null
    • 文字标记:one、sometext、main、……
  • 文本操作:
    • 字符串连接:+
    • 文字替换:|名字是${name}|
  • 算术运算:
    • 二元运算符:+、-、*、/、%
    • 减号(一元运算符):-
  • boolean 运算:
    • 二元运算符:和,或
    • boolean 取反(一元运算符):!, not
  • 比较和平等:
    • 比较器:>、<、>=、<=(gt、lt、ge、le)
    • 等号运算符:==, != (eq, ne)
  • 条件运算符:
    • 如果-那么:(如果)? (然后)
    • 如果-那么-其他:(如果)? (然后):(否则)
    • 默认值:(值)?:(默认值)

关于Java 评估字符串作为表达式或代码执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58342597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com