我们有一个老式的for循环来将自定义对象添加到ArrayList中。
public List<Object> generateList() {
List<Object> list = new ArrayList<Object>();
for (int i = 0; i < 10; i++) {
list.add(new Manager(50000, 10, "Finance Manager"));
list.add(new Employee(30000, 5, "Accounts"));
}
return list;
}有没有办法通过使用java8来做到这一点呢?
我尝试使用Stream.generate(MyClass::new).limit(10);,但在java8中我没有找到正确的方法来实现上述功能。
有什么建议吗?
发布于 2019-11-09 12:10:33
由于没有公共类型派生,也不需要替代元素,一种方法是简单地创建两种类型元素的nCopies,并将它们添加到结果列表中:
List<Object> list = new ArrayList<>();
list.addAll(Collections.nCopies(10, new Manager(50000, 10, "Finance Manager")));
list.addAll(Collections.nCopies(10, new Employee(30000, 5, "Accounts")));
return list;使用Stream,您可以将它们生成为
Stream<Manager> managerStream = Stream.generate(() -> new Manager(...)).limit(10);
Stream<Employee> employeeStream = Stream.generate(() -> new Employee(...)).limit(10);
return Stream.concat(managerStream, employeeStream).collect(Collectors.toList());但这可能是一个绝对有效的要求,为了交替地交错两个流中的元素,您可以使用this answer中建议的解决方案,但将类型定义为当前对象的超级类型,或者修改实现以返回Object类型流。(老实说,如果可以选择的话,我更喜欢前者。)
https://stackoverflow.com/questions/58776255
复制相似问题