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 !