最近,作為我學習的一部分,我們開始用流來練習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
提交
取消
