如何将字符串转换为lambda表达式?

16 浏览
0 Comments

如何将字符串转换为lambda表达式?

我思考了一下,想到了一个有趣的问题。假设我们有一个配置(输入)文件,其中包含以下内容:

x -> x + 1

x -> x * 2

x -> x * x

x -> -x

此外,我们还有一个整数列表:

List list = new ArrayList<>();
list.addAll(Arrays.toList(1, 2, 3, 4, 5));

有没有办法将字符串(例如"x -> x + 1")转换为表示lambda表达式的对象?然后可以使用该对象进行如下操作:

Object lambda = getLambdaFromString("x -> x + 1");
if (lambda.getClass().equals(IntFunction.class) {
    list.stream().forEach()
        .mapToInt(x -> x)
        .map(x -> ((IntFunction)lambda).applyAsInt(x))
        .forEach(System.out::println);
}

我应该如何编写这样的方法getLambdaFromString

  • 我可以从JDK/JRE中重用一些内容吗?
  • 我需要自己编写所有代码吗?
  • 是否有可能将Object lambda缩小为只捕获lambda的其他类型?
0