首页 > 解决方案 > 计算 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

标签: java

解决方案


这是一种方法:对于 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());

推荐阅读