我现在正在学习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;。感谢。
答案 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);
你的意思是像这样使用流吗?