Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import java.util.function.Function;
- public class RpnCalculator {
- private static Map<String, Function<Deque<Integer>, Integer>> operations = new HashMap<>();
- static {
- operations.put("+", deque -> deque.pop() + deque.pop());
- operations.put("-", deque -> deque.removeLast() - deque.pop());
- operations.put("*", deque -> deque.pop() * deque.pop());
- operations.put("/", deque -> deque.removeLast() / deque.pop());
- operations.put("SQRT", deque -> (int) Math.sqrt(deque.pop()));
- operations.put("MAX", deque -> deque.stream().max(Integer::compareTo).orElseThrow(() -> new IllegalArgumentException("No Numbers Provided Before MAX")));
- }
- static public int calculate(String expression) {
- String[] tokens = expression.split(" ");
- Deque<Integer> numbers = new ArrayDeque<>();
- Arrays.stream(tokens).forEach(token -> {
- if (operations.containsKey(token)) {
- numbers.push(operations.get(token).apply(numbers));
- } else {
- numbers.push(Integer.valueOf(token));
- }
- });
- return numbers.pop();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement