我正在尝试初始化随机5个元素(对象),我正在尝试使用 Stream.iterate 函数,但是错误的第一个元素(对象)总是 null
nil
输出:
Stream.iterate(new Student(), s -> {
s.setId(new Random().nextInt(5));
s.setUsername(UUID.randomUUID().toString());
s.setPassword(UUID.randomUUID().toString());
return s;
}).limit(5)
.forEach(System.out::println);
这里有什么问题?
答案 0 :(得分:7)
作为给定答案的补充:按照您的方式使用iterate
,您实际上只创建了一个Student
的实例,并且您一直在变异。
只要使用forEach
方法使用流的每个元素,就可以了。如果您在List
中收集了流,那么在应用最后一个变异后,您将获得相同元素的5倍列表。
如果要创建多个实例,请使用generate
:
Stream.generate(() -> new Student(new Random().nextInt(5),
UUID.randomUUID().toString(),
UUID.randomUUID().toString()))
.limit(5)
.forEach(System.out::println);
答案 1 :(得分:5)
Stream.iterate()
返回的第一个元素是种子元素,即您提供的新Student()。请参阅javadoc
答案 2 :(得分:0)
我找到了基于之前答案的问题解决方案
Stream.generate(Student::new)
.map(s -> {
s.setId(new Random().nextInt(5));
s.setUsername(UUID.randomUUID().toString());
s.setPassword(UUID.randomUUID().toString());
return s;
}).limit(5)
.forEach(System.out::println);
全部谢谢。