ArrayList итерация с потоками - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть список списков. Мне нужно извлечь элементы из этих списков на основе индекса и сделать его индивидуальным массивом. Я попытался сделать это, добавив

List<List<String>> multilist = new ArrayList<>();

List<List<String>> totalRecords= totalRecordsList;

List<String> targetList = totalRecords.stream().filter(e ->
     e.get(index)!=null).flatMap(List::stream) .collect(Collectors.toCollection(ArrayList::new));

multilist.add(targetList);

Но все же внутри списка списков, вместо того, чтобы хранить его как отдельные объекты массива, он объединяет все элементы. Не могли бы вы исправить, где я не прав.

Спасибо

1 Ответ

0 голосов
/ 17 сентября 2018

Эта операция:

.flatMap(List::stream)

объединяет все входные списки в поток.

Если вы просто хотите взять index -й элемент каждого списка, замените егос:

.map(e -> e.get(index))

В целом:

totalRecords.stream()
    .filter(e -> e.get(index)!=null)
    .map(e -> e.get(index))
    .collect(Collectors.toCollection(ArrayList::new))

Вы можете избежать повторения получения, изменив фильтр и карту:

totalRecords.stream()
    .map(e -> e.get(index))
    .filter(Object::nonNull)
    .collect(Collectors.toCollection(ArrayList::new))
...