为了账号安全,请及时绑定邮箱和手机立即绑定

Java - 如何在流中使用函数?

Java - 如何在流中使用函数?

MYYA 2019-04-19 18:15:13
最近,作为我学习的一部分,我们开始用流来练习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上每个字母的方法,然后打印出每个


查看完整回答
反对 回复 2019-05-15
  • 3 回答
  • 0 关注
  • 522 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信