Было бы
boolean result = R.matches(index);
или
boolean result = R.startsWith(row + ",");
Теперь в HashMap нет отсортированных ключей, однако есть карта, которая также является SortedMap, а именно TreeMap:
Вместо
Map<String, T> map = new HashMap<>();
сделать
SortedMap<String, T> map = new TreeMap<>();
Как "1," < "12,"
, учитывая, что ',' < '0'
достаточно стандартного сравнения строк.
Тогда возможно получение подкарты строки:
String firstKey = row + ",";
String lastKey = row + "/"; // As '/' > ','
SortedMap submap = map.subMap(firstKey, lastKey);
Эта подкарта поддерживается исходной картой, то есть ее изменение изменит карту.
Надо сказать, что ключи кажутся немного искусственными, возможно, строка + другое поле в классе RowKey или Map<Integer, Map<String, T>>
(сначала карта строк) будет иметь больше смысла.