Java 用lambda替换while循环

Java 用lambda替换while循环,java,lambda,Java,Lambda,我正在学习lambdas,我有一个练习,用lambdas重写代码中的while循环。此方法获取编码的用户输入,并返回解码的。我面对这个问题,不明白我该怎么做。(我知道这并不难,但我就是不明白这个概念。)我在这里没有发现任何类似的问题 p、 另外,还有一个问题——这个while循环(或者整个方法)可以用方法引用进行修改吗 public String decode(String input) { StringBuilder letters = new StringBuilder();

我正在学习lambdas,我有一个练习,用lambdas重写代码中的while循环。此方法获取编码的用户输入,并返回解码的。我面对这个问题,不明白我该怎么做。(我知道这并不难,但我就是不明白这个概念。)我在这里没有发现任何类似的问题

p、 另外,还有一个问题——这个while循环(或者整个方法)可以用方法引用进行修改吗

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(()->{})