Как инициализировать 2d ArrayList с потоками - PullRequest
1 голос
/ 18 июня 2019

У меня есть 2D ArrayList , как этот: ArrayList<ArrayList<SingleCell>> grid;. Я хочу инициализировать его, как в этом примере, с обычным ArrayList:

List<Person> persons = Stream.generate(Person::new)
                             .limit(60)
                             .collect(Collectors.toList());

Я получаю ширину и высоту при создании класса держателя. Я хочу заполнить 2D ArrayList new SingleCell(); на основе переданного размера. Можно ли сделать это так, и если это возможно, как я могу это сделать? Также есть ли лучший способ?

1 Ответ

1 голос
/ 19 июня 2019

В приведенном вами примере Person::new используется для генерации элементов списка, но этот генератор может быть любой лямбда-выражением, которую вы любите, так что примерно так:

List<List<SingleCell>> grid =
    Stream.generate(()->
        Stream.generate(SingleCell::new)
        .limit(width)
        .collect(Collectors.toList())
    )
    .limit(height)
    .collect(Collectors.toList());
...