java - 使用 Lambda 表达式使用 HashMap 替换字符串中的字符

标签 java lambda

所以我正在做一个项目,在这个项目中,我必须将包含希腊字母的字符串转换为包含该字母的英文表示形式的字符串。所以一个希腊人α会变成alphaΑ会变成Alpha .

我创建了一个 HashMap,它具有从 Unicode 字符到普通字符串的适当转换。

我使用了一个简单的 For循环检查是否 Char在输入StringKeyHashMap如果是,那么我将使用 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 的公共(public)静态方法中作为输入。 我想知道的是是否可以用 lambda 表达式做同样的事情?我已经找到了几个替代 Character 的解决方案在String但他们不使用 HashMap/Dictionary .

我知道为了使用 lambda 表达式而将其转换为 lambda 表达式是完全没有用的,但是因为我有另外 7 个这样的函数将我的代码缩短了近 60% 我想看看它是否完全有可能在“一行”代码中做到这一点。这样我就可以减少使用的单独方法的数量并获得更清晰的代码。

到目前为止,我已经找到了一种方法来转换 StringStream使用:

String.chars()

然后转换这个 IntStreamStream<Character>

.mapToObj(ch -> (char) ch)

并过滤以查看是否 CharacterHashMap

.filter(ch -> (GREEK_LETTER_DICT.containsKey(ch)))

问题在于我做不到

  1. 附加原件Character到输出 String如果它不在 HashMap
  2. 替换Character使用 HashMap 中的字符串

因此,如果您对这两点有任何帮助,我们将不胜感激。我发现有时候我的想法是错误的,因为我没有看是否 CharacterString等于 Character在选项列表中,我应该检查该选项列表是否返回正数 index .所以这个(伪代码):

"StringWithOptions".indexOf('characterLiteral')

而不是这个:

Character.equals("One|of|these")

最佳答案

怎么样:

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());
}

关于java - 使用 Lambda 表达式使用 HashMap 替换字符串中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38246623/

相关文章:

haskell - 没有因使用 `print' 而产生的 (Show (Int -> Int)) 实例

java - 从 SBT 资源文件夹中读取文件而不转义字符

java - JSP 页面只从数据库中加载一张图片

java - Java中作为函数参数的函数

c++ - C++ |使用lambda函数检查流是否成功打开

c++ - 模板函数无法识别由 auto 变量引用的 lambda

Java 8 lambda : iterate over stream objects and use previous/next object(s) in stream

java - 无法使用 POST 请求和 Jackson 发送 JSON

Java - 找不到 .class 问题

java - 了解 Java 中 <> 中扩展类中的信息?