Reverse Polish Notation - Solution

On se retrouve aujourd'hui pour la solution du précédent #KataOfTheWeek proposé par Bertrand en début de semaine !

Voici la solution proposée :

import java.util.Arrays;
import java.util.Stack;
import java.util.function.*;

public class ReversePolishNotation {

    public static Double calc(String input) {
        Stack<Double> numbers = new Stack<>();
        Arrays.asList(input.split(" ")).stream().forEach(number -> {
            switch(number) {
                case "+":
                    calcSign(numbers, (n1, n2) -> n2 + n1);
                    break;
                case "-":
                    calcSign(numbers, (n1, n2) -> n2 - n1);
                    break;
                case "*":
                    calcSign(numbers, (n1, n2) -> n2 * n1);
                    break;
                case "/":
                    calcSign(numbers, (n1, n2) -> n2 / n1);
                    break;
                default:
                    numbers.push(Double.parseDouble(number));
            }
        });
        return numbers.pop();
    }

    protected static Stack<Double> calcSign(Stack<Double> numbers, BiFunction<Double, Double, Double> operation) {
        numbers.push(operation.apply(numbers.pop(), numbers.pop()));
        return numbers;
    }

    public static void main(String[] args) {
        System.out.print(calc("-12.9 3 /"));
    }

}

A bientôt pour un nouveau #KataOfTheWeek !

TakiVeille

TakiVeille