Как упростить поиск индекса элемента в массиве?
Можно ли упростить такой код?
logicString.charAt(Arrays.stream(logicTTArray).toList().indexOf(currentType));
Ответы (1 шт):
Преобразование в stream с последующей конвертацией в список излишне, массив конвертируется в список при помощи классического метода Arrays.asList или List.of, начиная с Java 9:
logicString.charAt(Arrays.asList(logicTTArray).indexOf(currentType));
Если массив logicTTArray отсортирован, можно использовать более быстрый бинарный поиск Arrays.binarySearch:
logicString.charAt(Arrays.binarySearch(logicTTArray, currentType));
Однако, поскольку суть задачи состоит в том, что требуется найти некий символ в строке logicString, расположенный по индексу элемента currentType в массиве logicTTArray, можно предложить решение на основе некоторого перечисления, хранящего символы для каждого "ключа" currentType (вместо строки logicString).
Тогда поиск будет реализован за постоянное время:
enum MyType {
A('a'), B('b'),
// ...
Y('y'), Z('z');
private char symbol;
private MyType(char c) { this.symbol = c;}
public char getSymbol() { return this.symbol;}
}
Здесь эквивалентом массива logicTTArray может быть массив значений перечисления MyType.values(), и соответственно currentType будет сразу содержать нужный символ:
MyType currentType = MyType.Z;
char tt = currentType.getSymbol();