String convSummary(String l) {
String s = l.toLowerCase(), r ="";
for(int i = 0 ; i < s.length() ;i++){
char c = s.charAt(i);
if(c == 'a' || c == 'b' || c == 'c' || c == 'd' || c == 'e')
r += (char) (c & 0x5f);
if(c == 'v' || c == 'w' || c == 'x' || c == 'y' || c == 'z')
r += c;
}
return r;
}
如何使用stream或lambda简化代码 我是初学者,我想了解更多有关lambda和stream的信息 谢谢你的帮助...
答案 0 :(得分:3)
您可以使用String.chars()
来获取字符流,
但是在这里有更重要的优化:
StringBuilder
。else if
而不是两个if
(字符c
将永远不会同时其中一个&#34 ; abcde&#34; 和&#34; vwxyz&#34;)将上述内容放在一起:
String convSummary2(String s) {
StringBuilder sb = new StringBuilder();
s.chars().map(Character::toLowerCase).forEach(c -> {
if ('a' <= c && c <= 'e') {
sb.append((char)(c & 0x5f));
} else if ('v' <= c && c <= 'z') {
sb.append((char) c);
}
});
return sb.toString();
}
答案 1 :(得分:2)
如果您不打算并行运行代码,那么Janos的答案很棒,但我们应该努力通过简单地切换并行中间操作来制作可以轻松并行化的代码。 / p>
所以,使用streams / lambdas转换你的代码;在if
中间操作中使用filter
条件标准,利用map
在if语句中执行逻辑,然后collect
将其转换为字符串。
return
s.toLowerCase()
.chars()
.filter(i -> 'a' <= i && i <= 'e' ||
'v' <= i && i <= 'z')
.map(i -> 'a' <= i && i <= 'e' ?
(char)(i & 0x5f) :
(char)i)
.mapToObj(i -> Character.toString((char)i))
.collect(Collectors.joining());
您只需调用parallel()
中间操作即可轻松并行化。
答案 2 :(得分:0)
使用以下代码:
int z=(int)c;
if(z>=97 && z<=101) //these are the ascii value of the letters
{
//code for if c is either a,b,c,d,e
System.out.println("a,b,c,d,e");
}
else if(z>=118 && z<=122){
//code for if c is either v,w,x,y,z
System.out.println("v,w,x,y,z");
}