So i'm working on a project in which I have to convert a String containing greek letters in to a string containing the english representation for this letter. So a greek α
would become alpha
and Α
would become Alpha
.
I have created a HashMap which has the appropriate conversions from Unicode Character to a normal String.
I have used a simple For
loop to check if a Char
in the input String
is a Key
in the HashMap
and if it is then i'll append its replacement using a StringBuilder
. Here is the code I use to do this:
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();
This is in a public static method with String
as input.
The thing I want to know is if it is possible to do the same with a lambda expression? I have already found a couple of solutions replacing a Character
in String
but they do not use a HashMap
/Dictionary
.
I understand that it is completely useless to just convert this into a lambda expression for the sake of using a lambda expression, but because I have another 7 of these functions shortening my code by almost 60% I would like to see if it is at all possible to do this in "one line" of code. This way i can decrease the number of separate methods I use and get cleaner code.
So far I have found a way to convert a String
to a Stream
using:
String.chars()
Then converting this IntStream
to a Stream<Character>
with
.mapToObj(ch -> (char) ch)
and filtering to see if the Character
is in the HashMap
with
.filter(ch -> (GREEK_LETTER_DICT.containsKey(ch)))
The problem lies in the fact that I am not able to
Character
to the output String
if it is not in the HashMap
Character
with the String in the HashMap
So any help on these two points is appreciated. I found out that sometimes I think the wrong way around because instead of seeing if a Character
in a String
is equal to a Character
in a list of options, I should have checked if that list of options returns a positive index
. So this (PseudeoCode):
"StringWithOptions".indexOf('characterLiteral')
instead of this:
Character.equals("One|of|these")
How about that:
public static String replaceGreekLetters(String snippet) {
return snippet
.chars()
.mapToObj(c -> (char) c)
.map(c -> GREEK_LETTER_DICT.getOrDefault(c, c.toString()))
.collect(Collectors.joining());
}
I would do something like this:
str
.chars()
.forEach(
character -> out.append(
GREEK_LETTER_DICT.getOrDefault(Character.toString(c), c)
)
);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With