首页 > 解决方案 > 使用流将以下命令式 Java 代码(嵌套的 for 循环)转换为 Java 8

问题描述

下面是嵌套 for 循环的命令式样式。我想利用 java 8 Streams 和其他特性使其成为一种功能风格。

import java.util.Arrays;

public class Java8 {

    public static final String TAILS = "TAILS";
    public static final String HEADS = "HEADS";

    public static void main(String[] args) {
        String[] coines = new String[11];
        Arrays.fill(coines, TAILS);

        for(int i=1;i<coines.length ; i++){
            System.out.println("Person :" + i);
            for (int j=1; j < coines.length ; j++){

                if(j%i==0){
                    System.out.print("Flipping " + j +"th Element from " + coines[j] + " to ");
                    coines[j] = coines[j]== TAILS ? HEADS : TAILS;
                    System.out.println(coines[j]);
                }
            }
        }
    }
}

标签: arraysjava-8functional-programmingjava-stream

解决方案


我想你想做这样的事情

import java.util.Arrays;
import java.util.stream.IntStream;

public class Java8 {

public static final String TAILS = "TAILS";
public static final String HEADS = "HEADS";

public static void main(String[] args) {
    String[] coines = new String[11];
    Arrays.fill(coines, TAILS);
    IntStream.range(0, coines.length).forEach(i-> {
        System.out.println("Person :" + i);
        IntStream.range(0, coines.length).filter(j->j%i==0)
                .forEach(j -> {
                    System.out.print("Flipping " + j +"th Element from " + coines[j] + " to ");
                    coines[j] = coines[j].equalsIgnoreCase(TAILS) ? HEADS : TAILS;
                    System.out.println(coines[j]);
        });
    });
    
}}

我也改变if了 infilter==in equalsIgnoreCase


推荐阅读