for循环将自定义对象添加到arraylist的次数为n-Java8

我们有一个老式的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中我无法获得实现上述功能的正确方法。

有什么建议吗?

humingming001 回答:for循环将自定义对象添加到arraylist的次数为n-Java8

由于没有派生的公共类型并且不需要备用元素,因此一种方法是简单地创建两种类型的元素的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类型Stream。 (老实说,尽管可以选择,我还是更喜欢前者。)

本文链接:https://www.f2er.com/3134093.html

大家都在问