【发布时间】:2018-01-10 17:25:08
【问题描述】:
所以我创建了一个 IntStream,我给它的范围是 1 - 9。我希望能够使用 map 函数来获取给定范围 (1-9) 中的每个元素并随机化每个元素。
基本上我想在每次运行程序时以不同的顺序流式传输数字 1 - 9。 (我对其他想法持开放态度,但必须使用流)。
我听说过使用 Java 的 Random 类,但我不确定如何在每个元素的映射上实现它。
我试过这样做,但有错误:
IntStream.range(1, 9).map(x -> x = new Random()).forEach(x -> System.out.println(x));
任何帮助将不胜感激。
【问题讨论】:
-
“基本上我想在每次运行程序时以不同的顺序流式传输数字 1 - 9。(我对其他想法持开放态度,但它必须使用流)”直言不讳: 如果这是你的目标,放弃吧。流对于这个任务来说不是一个有用的抽象,并且很可能是有问题的。当然,如果这不是您的目标,那么您也许可以做点什么。
-
Random#ints(x, y)? -
x -> x = new Random()这不是你认为的那样。x是一个整数变量,您正在尝试将Random类型的对象分配给它。 -
@GR412 不会的。最好的办法是有一个中间列表:
List<Integer> list = IntStream.rangeClosed(1, 9).boxed().collect(toList()); Collections.shuffle(list); return list.stream(); -
定义“进一步的问题”。 (您可以将明确的
Random传递给Collections.shuffle。)但说真的,Collections.shuffle是解决这个问题的正确方法。
标签: java random java-8 java-stream