Быстрый трюк для равномерного распределения «осколков» - это использование функции ha sh.
Я предлагаю этот метод, который использует функцию java String.hashCode()
по умолчанию
public static char getShardLabel(String string) {
int hash = string.hashCode();
// using Math.flootMod instead of operator % beacause '%' can produce negavive outputs
int hashMod = Math.floorMod(hash, 26);
return (char)('A'+(hashMod));
}
Как указано здесь , этот метод считается «даже достаточно».
На основе быстрого теста он выглядит быстрее, чем предложенное вами решение. На строках 80kk различной длины:
getShardLabel
заняло 65 миллисекунд stringToChar
заняло 571 миллисекунду