我正在尝试初始化随机5个元素(对象),我正在尝试使用Stream.iterate函数但是它错了第一个元素(对象)总是为空.
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);
Run Code Online (Sandbox Code Playgroud)
输出:
Student{id=null, username=null, password=null}
Student{id=0, username=7d7403e0-89f0-4033-a874-31e0aae1d7c6, password=590baa12-a9f7-4fef-8a47-4bcb7f2174d1}
Student{id=3, username=d75bff67-a1f7-4969-9418-93f3e0eb1cd7, password=9e48d614-a15e-4f2a-9e87-63ed3a81f410}
Student{id=3, username=47943516-e8bd-4ffe-bc47-4e251104994a, password=f2d4d02d-2e37-4346-a51d-b83f40044c68}
Student{id=2, username=1a1e5f9e-7fac-439f-b5f2-2931884e0772, password=9df36248-5e1e-4b28-b1c0-020123dd26b8}
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
作为给定答案的补充:使用iterate您的方式,您实际上只创建了一个Student持续变异的实例.
只要您使用该forEach方法使用流的每个元素,就可以了.如果您在a中收集了流List,那么在应用最后一个变异后,您将获得相同元素的5倍列表.
如果要创建多个实例,请使用generate:
Stream.generate(() -> new Student(new Random().nextInt(5),
UUID.randomUUID().toString(),
UUID.randomUUID().toString()))
.limit(5)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)