RomanToArabicConverter.java
package epam.roman;
import java.util.HashMap;
import java.util.Map;
import java.util.function.ToIntFunction;
/**
* A converter that converts Roman numerals to Arabic integers.
*/
public final class RomanToArabicConverter implements ToIntFunction<String> {
private static final Map<Character, Integer> ROMAN_TO_ARABIC_MAP = new HashMap<>();
static {
ROMAN_TO_ARABIC_MAP.put('I', 1);
ROMAN_TO_ARABIC_MAP.put('V', 5);
ROMAN_TO_ARABIC_MAP.put('X', 10);
ROMAN_TO_ARABIC_MAP.put('L', 50);
ROMAN_TO_ARABIC_MAP.put('C', 100);
ROMAN_TO_ARABIC_MAP.put('D', 500);
ROMAN_TO_ARABIC_MAP.put('M', 1000);
}
/**
* Converts a Roman numeral string to an Arabic integer.
*
* @param roman the Roman numeral string to be converted
* @return the Arabic integer representation of the Roman numeral
*/
@Override
public int applyAsInt(String roman) {
int result = 0;
int prevValue = 0;
for (int i = roman.length() - 1; i >= 0; i--) {
char currentChar = roman.charAt(i);
int currentValue = ROMAN_TO_ARABIC_MAP.get(currentChar);
if (currentValue < prevValue) {
result -= currentValue;
} else {
result += currentValue;
}
prevValue = currentValue;
}
return result;
}
}