最近,作为我学习的一部分,我们开始用流来练习Java问题解决。虽然用流来解决加/减或字符串/字符排序问题的定量问题,但相对清晰易懂,但是使用流时我不清楚一些更复杂的问题。例如,给定一组字符,我们必须为范围内的每个字母打印GO /去反转信号,例如A变为Z,字母b变为y。例如,假设我们有集合'A','k','p' - >在操作之后我们只得到p。使用简单的函数,我能够解决问题如下:public static char flipLetter(char c){
int count = 7;
if((int)c >= 72 && (int)c <= 78){
for (int i = 72; i <= 78; i++) {
if((int)c == i)
return (char)((int)'Z' - count);
count++;
}
}
else{
for (int i = 104; i <= 110; i++) {
if((int)c == i)
return (char)((int)'z' - count);
count++;
}
}
return c;}public static boolean isInRange(char c){
return (((int)c >= 72 && (int)c <= 78) || ((int)c >= 104 && (int)c <= 110));}public static void inRange(char arr[]){
for (int i = 0; i < arr.length; i++) {
if(isInRange(arr[i])){
System.out.print(flipLetter(arr[i])+" ");
}
}}我很乐意获得有关如何使用我编写的代码来实现流程或听取其他评论的帮助。
3 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
你可以这样做:
public static void inRange(char arr[]){ IntStream.range(0, arr.length).mapToObj(i -> arr[i]) .filter(letter -> isInRange(letter)) .map(letter -> flipLetter(letter)) .forEach(e -> System.out.print(e + " "));}
这将创造一个Stream
对的Array
传递,过滤掉任何不在范围内,调用flipLetter
上每个字母的方法,然后打印出每个
添加回答
举报
0/150
提交
取消