@Override public boolean accept(RomanNumber input) { if (previousNumber == null) { previousNumber = input; subtracted = false; return true; } if (!subtracted && previousNumber.getValue() >= input.getValue()) { previousNumber = input; subtracted = false; return true; } if (!subtracted && previousNumber.getValue() < input.getValue()) { if (SUBTRACTABLE.get(previousNumber).contains(input)) { previousNumber = input; subtracted = true; return true; } else { previousNumber = input; subtracted = false; return false; } } if (subtracted && previousNumber.getValue() > input.getValue()) { previousNumber = input; subtracted = false; return true; } if (subtracted && previousNumber.getValue() <= input.getValue()) { previousNumber = input; subtracted = true; return false; } return false; }