Advertisement
Guest User

Untitled

a guest
Jul 21st, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. import java.util.*;
  2. import java.util.function.Function;
  3.  
  4. public class RpnCalculator {
  5.  
  6. private static Map<String, Function<Deque<Integer>, Integer>> operations = new HashMap<>();
  7.  
  8. static {
  9. operations.put("+", deque -> deque.pop() + deque.pop());
  10. operations.put("-", deque -> deque.removeLast() - deque.pop());
  11. operations.put("*", deque -> deque.pop() * deque.pop());
  12. operations.put("/", deque -> deque.removeLast() / deque.pop());
  13. operations.put("SQRT", deque -> (int) Math.sqrt(deque.pop()));
  14. operations.put("MAX", deque -> deque.stream().max(Integer::compareTo).orElseThrow(() -> new IllegalArgumentException("No Numbers Provided Before MAX")));
  15. }
  16.  
  17. static public int calculate(String expression) {
  18. String[] tokens = expression.split(" ");
  19.  
  20. Deque<Integer> numbers = new ArrayDeque<>();
  21. Arrays.stream(tokens).forEach(token -> {
  22. if (operations.containsKey(token)) {
  23. numbers.push(operations.get(token).apply(numbers));
  24. } else {
  25. numbers.push(Integer.valueOf(token));
  26. }
  27. });
  28.  
  29. return numbers.pop();
  30. }
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement