Я прочитал этот пост Как использовать логику if-else в потоке Java 8 forEach
Весь смысл Java 8 состоит в написании более элегантного, удобочитаемого и лаконичного кода.Я переписал этот метод execute с использованием Java 8 Streams и Lambda, но то, что я в итоге получаю, ничем не отличается от версии Java 7.
private static boolean execute(String expression) {
Deque<Character> stack = new ArrayDeque<>();
for (char c : expression.toCharArray()) {
if (isOpenToken(c)) {
stack.push(c);
} else if (stack.isEmpty() || !matches(stack.pop(), c)) {
return false;
}
}
return stack.isEmpty();
}
Это то, как метод выглядит сейчас в Java 8
private static boolean execute(String expression) {
char[] a = expression.toCharArray();
Deque<Character> stack = new ArrayDeque<>();
IntStream.range(0, a.length).forEach(i -> {
if (isOpenToken(a[i])) {
stack.push(a[i]);
} else {
matches(stack.pop(), a[i]);
}
});
return stack.isEmpty();
}
Есть ли более элегантный способ сделать это в Java 8?