Char Array到Lambda Expression

时间:2017-03-29 03:20:43

标签: arrays loops java-8

我现在正在学习Java中使用的lambda表达式。 在这种情况下,我在将char []数组更改为lambda表达式时遇到问题。 所以,我想请一些帮助。 我的示例代码如下。

    Map<String, String> tempMap = new HashMap<String, String>();
    tempMap.put("a", "A");
    tempMap.put("b", "B");
    tempMap.put("c", "C");
    tempMap.put("d", "D");
    tempMap.put("e", "E");
    String tempStr = "abcdef";
    StringBuilder tempBuilder = new StringBuilder();
    char[] tempArray = tempStr.toCharArray();
    for(char c : tempArray) {
    tempBuilder.append(tempMap.getOrDefault(String.ValueOf(c),
    String.ValueOf(c));
    }

结果应为&#34; ABCDEf&#34;。感谢。

3 个答案:

答案 0 :(得分:1)

您可以使用CharSequence#codePoints创建一个字符流(比chars更安全代理配对),进行转换,然后使用Collectors.joining()

String input = "abcdef";
String output = input.codePoints()
                     .mapToObj(Character::toChars)
                     .map(String::valueOf)
                     .map(s -> tempMap.getOrDefault(s, s))
                     .collect(Collectors.joining());

答案 1 :(得分:1)

4castle’s answer的替代方案是

String output = Pattern.compile("").splitAsStream(tempStr)
                       .map(s -> tempMap.getOrDefault(s, s))
                       .collect(Collectors.joining());

这不会处理BMP之外的字符,但只要您注意使用它们作为Map中的键,代理对就会在结果字符串中正确汇编为原始格式,就像在原始的char[]方法中。

如果您想支持BMP之外的字符,可以使用

String output = Pattern.compile("(?!\\p{Cs})").splitAsStream(tempStr)
                       .map(s -> tempMap.getOrDefault(s, s))
                       .collect(Collectors.joining());

答案 2 :(得分:0)

Stream.of('a','b','c','d','e','f')
      .map(String::valueOf)
      .map(c -> tempMap.getOrDefault(c,c))
      .forEach(tempBuilder::append);

你的意思是像这样使用流吗?