所以,我有一个由自动生成的符号组成的单词列表。例如:hqst
。我将该单词的每个符号转换为Unicode,并用点.
连接起来,如下所示:104.113.115.116
。
我编写了以下lambda函数:
.map(word -> {
char[] symbols = word.toCharArray();
StringBuilder newWord = new StringBuilder();
for (int i = 0; i < symbols.length; i++) {
newWord.append((int) symbols[i]).append(".");
if (i == symbols.length - 1) {
newWord = new StringBuilder(newWord.substring(0, i));
}
}
return newWord.toString();
})
这个匿名方法能否使用流API进行重写?
Stream
API了吗?你将这个lambda表达式传递给哪个map
方法? - ErannewWord = new StringBuilder(newWord.substring(0, i));
可能是最昂贵的选择,只需说newWord.setLength(i);
即可。此外,您可以在循环之后仅执行一次newWord.setLength(Math.max(0, symbols.length - 1);
而不是将i
与symbols.length - 1
进行比较。整个代码可以在不复制整个String
到char[]
数组的情况下工作,只需使用charAt(i)
… - Holgerif(newWord.length() > 0) newWord.setLength(newWord.length() - 1);
来移除最后一个'.'
而不是将结果字符串设置为原始字符串长度减一。所以整个代码可以简化为.map(word -> { StringBuilder newWord = new StringBuilder(); for( int i = 0; i < word.length(); i++) newWord.append((int)word.charAt(i)).append('.'); return newWord.substring(0, Math.max(0, newWord.length()-1)); })
。 - Holger