Sne*_*ike 5 java random java-8 java-stream
所以我创建了一个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));
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
Jua*_*oza 10
它也可以通过以下方式完成Random.ints:
new Random().ints(1,10)
.distinct()
.limit(9)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
输出:
9 8 4 2 6 3 5 7 1
编辑
如果您需要Stream带有值,请执行以下操作:
Stream<Integer> randomInts = new Random().ints(1, 10)
.distinct()
.limit(9)
.boxed();
Run Code Online (Sandbox Code Playgroud)
如果您需要List带有值,请执行以下操作:
List<Integer> randomInts = new Random().ints(1, 10)
.distinct()
.limit(9)
.boxed()
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
Streams真的不适合这份工作.就像,真的 真的.
更好的方法是使用Collections.shuffle:
// you can replace this with however you want to populate your array.
// You can do a for loop that loops from 1 to 9 and add each number.
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9));
Collections.shuffle(list);
// now "list" is in a random order
Run Code Online (Sandbox Code Playgroud)
编辑:
现在我知道你有一个自定义列表,这是另一种方法.编写两种方法将自定义列表转换为法线ArrayList,反之亦然.将您的自定义列表转换为a ArrayList,执行shuffle并将其转换回来.
只是为了好玩,Stream当平行时,可以按随机顺序生成东西,但不是真的.
我运行了这个代码10次:
IntStream.range(1, 10).parallel().forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)
以下是输出:
347195628
342179856
832497165
328194657
326479581
341287956
873629145
837429156
652378914
632814579
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
821 次 |
| 最近记录: |