0

我阅读了 byte buddy 和 javassist 文档,我想不知道是否可以转换如下字符串:

get foos where name == toto

data.getFoos().stream()
              .filter( f -> f.name.equals( "toto" ) )
              .collect( Collectors.toSet() )

正则表达式可以将表达式捕获为:

final Pattern query = Pattern.compile("get (\\w+) where (\\w+) ([=!]+) (\\w+)");
final Scanner scanner = new Scanner(System.in);
final Matcher matcher   = query.matcher(input);
matcher.group(1) // foos -> Foo and foos -> getFoos()
matcher.group(2) // field to use as filter
matcher.group(3) // symbol == / !=
matcher.group(4) // thing to match
  1. 转换get foosgetFoos()
  2. Foo类中检查name字段是否存在
  3. 如果字段name不是Number.class转换==为的实例.equals
  4. 表达
  5. 循环并打印结果

我读了一些例子却找不到这样的东西。所以我来这里取你的光。谢谢

4

1 回答 1

1

Byte Buddy 和 Javassist 都生成字节码,而不是 Java 码。然而,Javassist 确实具有将包含String的源代码从您的输入转换为字节码的功能。但是,源代码级别处于 Java 4 级别,因此您不能使用 lambda。

但是,我确实想知道这是否是解决您问题的正确方法。相反,我建议您以编程方式从参数中解析流。您可以通过创建自定义 API 将您的参数转换为相关流来放大这一点。

于 2016-07-06T18:46:27.587 回答