java - 计算 IntStream 模式
问题描述
问题 1:流(10 分)
通过构建单个流管道,完成以下模式方法以生成输出,如示例 jshell 会话所示。
假设答案保存在文件 pattern.jsh 中,并从以下内容开始您的答案:String pattern(int n) { return ... } jshell> import java.util.stream.*; jshell> /open pattern.jsh jshell> System.out.println(pattern(3)); 321.21..1 jshell> System.out.println(pattern(5)); 54321.4321..321...21....1 jshell> /exit
我如何尝试这个问题并按顺序打印出点?
这是我写的代码:
IntStream.iterate(5, x -> x > 0, x -> x -1 )
.flatMap(x -> IntStream.rangeClosed(0,x).map(y -> x - y))
.mapToObj(x -> x == 0 ? "." : x + "")
.reduce("", (x, y) -> x + y);
And this is the result i got:
"54321.4321.321.21.1."
I just dont know how to increment the dot part. Will be grateful if someone can help me out on this. Thank you
解决方案
这是一种方法:对于 5 到 1 范围内的每个数字 x,生成一个 y 5 到 1 的序列。如果 y > x,则发出“.”,否则发出 y。
String pattern = IntStream.iterate(5, x -> x > 0, x -> x - 1)
.boxed()
.flatMap(x -> IntStream.iterate(5, y -> y > 0, y -> y - 1)
.mapToObj(y -> y > x ? "." : y + ""))
.collect(Collectors.joining());