Так что я работаю над проектом, в котором мне нужно преобразовать строку, содержащую греческие буквы, в строку, содержащую английское представление для этой буквы. Таким образом, греческий α
стал бы alpha
и Α
стал бы Alpha
.Использование выражения Lambda для замены символов в строке с использованием HashMap
Я создал HashMap, который имеет соответствующие преобразования из Unicode Character в обычную строку.
Я использовал простой For
цикл, чтобы проверить, если на входе String
Char
находится в HashMap
в Key
и если после этого я буду добавлять его замену, используя StringBuilder
. Вот код, я использую, чтобы сделать это:
char[] ca = snippet.toCharArray();
StringBuilder out = new StringBuilder();
for (char c : ca) {
if (GREEK_LETTER_DICT.containsKey(Character.toString(c))) {
out.append(GREEK_LETTER_DICT.get(Character.toString(c)));
} else {
out.append(c);
}
}
return out.toString();
Это в общественном статический метод с String
в качестве входных данных. Вещь, которую я хочу знать, это если можно сделать то же самое с выражением лямбда? Я уже нашел пару решений, заменяющих Character
в String
, но они не используют HashMap
/Dictionary
.
Я понимаю, что совершенно бесполезно просто преобразовать это в выражение лямбда ради использования выражения лямбда, но поскольку у меня есть еще 7 из этих функций, которые сокращают мой код почти на 60%, я хотел бы видеть, это возможно сделать в «одной строке» кода. Таким образом, я могу уменьшить количество отдельных методов, которые я использую, и получить более чистый код.
До сих пор я нашел способ преобразовать String
к Stream
с помощью:
String.chars()
Тогда преобразование этого IntStream
в Stream<Character>
с
.mapToObj(ch -> (char) ch)
и фильтрации, чтобы увидеть, если Character
является в HashMap
с
.filter(ch -> (GREEK_LETTER_DICT.containsKey(ch)))
Проблема заключается в том, что я не в состоянии
- добавить оригинальный
Character
к выходуString
, если он не вHashMap
- заменить
Character
с строки вHashMap
Так что любая помощь по этим двум пунктам оценивается. Я узнал, что иногда я считаю неправильным, потому что вместо того, чтобы видеть, что Character
в String
равен Character
в списке параметров, я должен был проверить, возвращает ли этот список параметров положительный index
.Так что это (PseudeoCode):
"StringWithOptions".indexOf('characterLiteral')
вместо этого:
Character.equals("One|of|these")
на основе кода в вопросительных 'str.chars() Foreach (символ -> out.append (GREEK_LETTER_DICT.getOrDefault (Character.toString (с), с))),' – SMA
Ну это было быстро; -) Спасибо за ответ. с этим кодом удалось заставить его работать. Я поставлю его здесь. Мне пришлось внести несколько изменений в код. –
@SMA красивый. Я бы посоветовал вам ответить на этот вопрос. – Mena