Для цикла для добавления пользовательских объектов в Arraylist для N раз - Java8 - PullRequest
0 голосов
/ 09 ноября 2019

У нас есть цикл для добавления пользовательских объектов в 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 я не понимаю, как реализовать вышеуказанные функции.

Есть предложения, пожалуйста?

1 Ответ

1 голос
/ 09 ноября 2019

Поскольку нет общего производного типа и альтернативные элементы не требуются, один из способов - просто создать 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());

Но что может быть абсолютным действительным требованием, чтобы альтернативно перемежать элементы из обоих потоков, вы можете использовать решение, предложенное в этом ответе , но с типом, определенным как super для ваших текущих объектов, или изменением реализации для возврата Object типа Stream. (Честно говоря, я бы предпочел первое, хотя бы предоставил выбор.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...