gpt4 book ai didi

java - Java 8 Stream API 表示的嵌套 for 循环

转载 作者:行者123 更新时间:2023-12-02 15:38:54 24 4
gpt4 key购买 nike

最近我决定通过重构简单的代码片段来研究 Java 8。我有以下示例,我正在尝试将其转换为 Java 8 表示形式。

public static void halfTriangle(){
for(int i=1; i<=4; i++){
for(int j=1; j<=i; j++){
System.out.print("* ");
}
System.out.println(" ");
}
}

我设法想出了这样的东西:

public static void halfTriangleJava8(){
IntStream.range(1, 5)
.forEach(i -> IntStream.range(1, 5)
.forEach(j -> System.out.println("* "))
);
}

但我不知道我可以把剩下的放在哪里:

System.out.println(" ");

我尝试过类似的方法:

public static void halfTriangleJava8(){
IntStream.range(1, 5)
.forEach(i -> {
IntStream.range(1, 5);
System.out.println(" ");
}
.forEach(j -> System.out.println("* "))
);
}

但是它给了我一个我不完全理解的错误。“此表达式的目标类型必须是函数式接口(interface)”。

我相信这是一个非常简单的错误,但我今天才开始研究 Java 8,因此我们将不胜感激。

最佳答案

这不会更优雅,但你可以:

public static void halfTriangleJava8(){
IntStream.range(1, 5).forEach(i -> {
IntStream.rangeClosed(1, i).forEach(j -> System.out.print("* "));
System.out.println(" ");
});
}

尽管对于这类问题,最好还是保留一个古老的 for 循环。

一种更漂亮的方法是将每个整数映射到要在相应行打印的String:

public static void halfTriangleJava8(){
IntStream.range(1, 5)
.mapToObj(i -> String.join(" ", Collections.nCopies(i, "*")))
.forEach(System.out::println);
}

关于java - Java 8 Stream API 表示的嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36551518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com