Rai*_*nne 2 java java-8 java-stream
最近我决定通过重构简单的代码片段来研究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(" ");
}
}
Run Code Online (Sandbox Code Playgroud)
我设法想出这样的东西:
public static void halfTriangleJava8(){
IntStream.range(1, 5)
.forEach(i -> IntStream.range(1, 5)
.forEach(j -> System.out.println("* "))
);
}
Run Code Online (Sandbox Code Playgroud)
但我不知道我可以留在哪里:
System.out.println(" ");
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的东西:
public static void halfTriangleJava8(){
IntStream.range(1, 5)
.forEach(i -> {
IntStream.range(1, 5);
System.out.println(" ");
}
.forEach(j -> System.out.println("* "))
);
}
Run Code Online (Sandbox Code Playgroud)
但它给了我一个我不完全理解的错误."此表达式的目标类型必须是功能接口".
我相信这是一个非常简单的错误,但我今天才开始研究Java 8,所以任何帮助都会非常感激.
这不会更优雅但你可以:
public static void halfTriangleJava8(){
IntStream.range(1, 5).forEach(i -> {
IntStream.rangeClosed(1, i).forEach(j -> System.out.print("* "));
System.out.println(" ");
});
}
Run Code Online (Sandbox Code Playgroud)
考虑到这些问题,最好保持一个好的for循环.
一种更漂亮的方法是将每个整数映射String到要在相应行上打印的整数:
public static void halfTriangleJava8(){
IntStream.range(1, 5)
.mapToObj(i -> String.join(" ", Collections.nCopies(i, "*")))
.forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |