使用 java 8 流生成一个 N 个字符长的虚拟字符串

Dav*_*arr 3 java java-8 java-stream

有很多方法可以做到这一点,但是使用 Java 8 流(可能是 IntStream),我如何生成一个 N 个字符长的虚拟字符串?

我已经看到使用 IntStream.range() 和各种聚合函数(sum、average)的示例,但我没有看到这样做的方法。

我的第一个随机猜测是这样的:

IntStream.range(1, 110).map(i -> "x").collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)

但这在几个不同的方面都是错误的。

dav*_*xxx 5

您需要使用mapToObj()and 而不是map()实际使用IntStreamandIntStream.map()作为参数IntUnaryOperator,即 (int->int) 函数。

对于相同的字符虚拟(例如“x”)

collect = IntStream.range(1, 110)
                   .mapToObj(i ->"x")
                   .collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)

形成随机假人:

你可以使用Random.ints(long streamSize, int randomNumberOrigin, int randomNumberBound).

返回一个流,产生给定的 streamSize 数量的伪随机 int 值,每个值都符合给定的原点(包含)和边界(不包含)。

要生成一个包含 65 到 100 ASCII 码之间的 10 个随机字符的字符串:

public static void main(String[] args) {
    String collect = new Random().ints(10, 65, 101)
                                 .mapToObj(i -> String.valueOf((char) i))
                                 .collect(Collectors.joining());

    System.out.println(collect);

}
Run Code Online (Sandbox Code Playgroud)