Arrays 字符数组到Lambda表达式
我现在正在学习Java中使用的lambda表达式。 在本例中,我在将char[]数组更改为lambda表达式时遇到问题。 所以,我想寻求一些帮助。 我的示例代码如下Arrays 字符数组到Lambda表达式,arrays,loops,java-8,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"); tempM
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));
}
Map tempMap=newhashmap();
tempMap.put(“a”、“a”);
tempMap.put(“b”、“b”);
tempMap.put(“c”、“c”);
tempMap.put(“d”、“d”);
tempMap.put(“e”、“e”);
字符串tempStr=“abcdef”;
StringBuilder tempBuilder=新的StringBuilder();
char[]tempArray=tempStr.toCharArray();
for(字符c:tempArray){
append(tempMap.getOrDefault(String.ValueOf(c)),
字符串的值(c));
}
结果应该是“ABCDEf”。谢谢
您的意思是像这样使用流吗?您可以使用创建字符流(比字符更安全的代理项对),进行转换,然后使用
另一种选择是
这不会处理BMP之外的字符,但只要您注意将它们用作映射
中的键,代理项对就会正确地组合到结果字符串中的原始形式,就像您原来的char[]
方法一样
如果要支持BMP以外的字符,可以使用
String output = Pattern.compile("(?!\\p{Cs})").splitAsStream(tempStr)
.map(s -> tempMap.getOrDefault(s, s))
.collect(Collectors.joining());
首先,你从来不做tempMap.put()表示“f”和“f”。但更重要的是,您告诉了我们您的预期结果是什么,但没有告诉我们您的实际结果。我不太清楚您试图在此处使用lambda表达式的位置。您是在问如何使用流吗?是的,我想将其用于流。如果输入字符串的每个字母都不包含在映射中,则不会更改e、 所以,结果是“ABCDEf”,因为map中没有“f”。谢谢。是的。但我不喜欢使用collect(collector.joining());以获得更好的性能。谢谢。@Hm我没有对性能差异进行基准测试,但它在内部也使用了StringBuilder
,并且还支持并行化。输入是字符串,可能会有所不同。流中直接输入不合适。首先,我想将tempStr更改为char[]数组,然后循环char[]数组。谢谢。来自@4casle的答案比这个好。:)
String input = "abcdef";
String output = input.codePoints()
.mapToObj(Character::toChars)
.map(String::valueOf)
.map(s -> tempMap.getOrDefault(s, s))
.collect(Collectors.joining());
String output = Pattern.compile("").splitAsStream(tempStr)
.map(s -> tempMap.getOrDefault(s, s))
.collect(Collectors.joining());
String output = Pattern.compile("(?!\\p{Cs})").splitAsStream(tempStr)
.map(s -> tempMap.getOrDefault(s, s))
.collect(Collectors.joining());