Я немного подумал и придумал интересную проблему, предположим, что у нас есть файл конфигурации (ввода):
x -> x + 1
x -> x * 2
x -> x * x
x -> -x
И кроме того, у нас есть список Integer
s:
List<Integer> list = new ArrayList<>();
list.addAll(Arrays.toList(1, 2, 3, 4, 5));
Есть ли способ конвертировать String
(x -> x + 1
и т.д.) в Object
, которые представляют собой лямбда-выражение? Которая затем может быть использована как:
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
на что-то другое, которое захватывает только lambdas?