. (number, modifier, unit) ([0, 1000), [1000, 1000_000), [1000_000, reset]), dir modifier. :
class Size {
public static int sizeToInt(String size) {
int n = size.length(), unit = size.charAt(n - 1), dir = unit == 'S' ? 1 : -1;
int i = 0;
int number = n > 1&&Character.isDigit(size.charAt(i)) ? size.charAt(i++) : '1';
int modifier = i + 1 < n ? size.charAt(i) : 0;
return -1 * (unit * 1000_000 + dir * (modifier * 1000 + number));
}
}
, , , number modifier ,
region s. Comparator :
Comparator<String> sizeComparator = Comparator.comparingInt(Size::sizeToInt);
List<String> sizes = Arrays.asList(
"3XL", "2XL", "XL",
"5L", "2L", "L",
"5M", "2M", "M",
"S", "2S", "3S",
"XS", "2XS", "3XS"
);
sizes.sort(sizeComparator);
System.out.println(sizes);
// ^--- [
// "3XS", "2XS", "XS",
// "3S", "2S", "S",
// "M", "2M", "5M",
// "L", "2L", "5L",
// "XL", "2XL", "3XL"
// ]