Java 用lambda替换while循环
我正在学习lambdas,我有一个练习,用lambdas重写代码中的while循环。此方法获取编码的用户输入,并返回解码的。我面对这个问题,不明白我该怎么做。(我知道这并不难,但我就是不明白这个概念。)我在这里没有发现任何类似的问题 p、 另外,还有一个问题——这个while循环(或者整个方法)可以用方法引用进行修改吗Java 用lambda替换while循环,java,lambda,Java,Lambda,我正在学习lambdas,我有一个练习,用lambdas重写代码中的while循环。此方法获取编码的用户输入,并返回解码的。我面对这个问题,不明白我该怎么做。(我知道这并不难,但我就是不明白这个概念。)我在这里没有发现任何类似的问题 p、 另外,还有一个问题——这个while循环(或者整个方法)可以用方法引用进行修改吗 public String decode(String input) { StringBuilder letters = new StringBuilder();
public String decode(String input) {
StringBuilder letters = new StringBuilder();
input = input.toUpperCase();
int i = 0, j = 0;
while (i < input.length()) {
char symbol = input.charAt(i);
char keySymbol = KEY.charAt(j);
int newIndex = (ALPHABET.indexOf(symbol) - ALPHABET.indexOf(keySymbol)) % ALPHABET.length();
char newSymbol = ALPHABET.charAt(newIndex);
letters.append(newSymbol);
j = ++j % KEY.length();
i++;
}
return letters.toString().toLowerCase();
}
公共字符串解码(字符串输入){
StringBuilder字母=新的StringBuilder();
input=input.toUpperCase();
int i=0,j=0;
而(i下面的代码示例包括原始解码方法和新的decodeLamda方法
decodeLambda方法替换“输入”上的迭代。运行该示例将显示它们具有相同的输出。可以将循环更改为方法引用
public class Main {
public static void main(String[] args) {
Main main = new Main();
System.out.println(main.decode("SECRET MESSAGE"));
System.out.println(main.decodeLambda("SECRET MESSAGE"));
}
public static String KEY = "HOPSCOTCH";
public static String ALPHABET = "ABCDEFGHIJKLMONOPQRSTUVWXYZ";
public String decode(String input) {
StringBuilder letters = new StringBuilder();
input = input.toUpperCase();
int i = 0, j = 0;
while (i < input.length()) {
char symbol = input.charAt(i);
char keySymbol = KEY.charAt(j);
int newIndex = Math.abs(ALPHABET.indexOf(symbol) - ALPHABET.indexOf(keySymbol)) % ALPHABET.length();
char newSymbol = ALPHABET.charAt(newIndex);
letters.append(newSymbol);
j = ++j % KEY.length();
i++;
}
return letters.toString().toLowerCase();
}
public String decodeLambda(String input) {
StringBuilder letters = new StringBuilder();
input = input.toUpperCase();
var ref = new Object() {
int j = 0;
};
input.chars()
.forEach( symbol -> {
char keySymbol = KEY.charAt(ref.j);
int newIndex = Math.abs(ALPHABET.indexOf(symbol) - ALPHABET.indexOf(keySymbol)) % ALPHABET.length();
char newSymbol = ALPHABET.charAt(newIndex);
letters.append(newSymbol);
ref.j = ++ref.j % KEY.length();
});
return letters.toString().toLowerCase();
}
公共类主{
公共静态void main(字符串[]args){
Main Main=新Main();
System.out.println(主解码(“秘密消息”);
System.out.println(main.decodeLambda(“秘密消息”);
}
公共静态字符串键=“跳房子”;
公共静态字符串字母表=“abcdefghijklqrstuvwxyz”;
公共字符串解码(字符串输入){
StringBuilder字母=新的StringBuilder();
input=input.toUpperCase();
int i=0,j=0;
而(i{
char keySymbol=KEY.charAt(参考j);
int newIndex=Math.abs(ALPHABET.indexOf(symbol)-ALPHABET.indexOf(keySymbol))%ALPHABET.length();
char newSymbol=ALPHABET.charAt(newIndex);
信件。附加(newSymbol);
ref.j=++ref.j%KEY.length();
});
返回字母.toString().toLowerCase();
}
}您希望lambda怎么样foreeachendexed(()->{})
?