Конвертировать цикл for в поток - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть цикл for ниже, и мне нужно использовать поток сбора, чтобы поддерживать единообразие с другим кодом.

for (int i = 0; i < res.getAllLists().size(); i++) {
    if (dataRes.getData().getId().equalsIgnoreCase(
            String.valueOf(res.getAllLists().get(i).getId()))) {
        res.getAllLists().remove(i);
    }
}

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Если вам действительно нужно использовать Stream, вы можете сделать это следующим образом

res.setAllLists(
    res.getAllLists().stream()                          // convert list to stream
        .filter(line -> !dataRes.getData().getId().equalsIgnoreCase(line))     // filter to keep only the non equal items
        .collect(Collectors.toList()));                 // convert back to a list

Но выражение Lamda для List является более чистым подходом и позволяет избежать снижения производительности, которое представляет Streamбудет делать

res.getAllLists().removeIf(list -> dataRes.getData().getId().equalsIgnoreCase(String.valueOf(list.getId())));
0 голосов
/ 27 февраля 2019

Чтобы условно удалить элементы из коллекции, используйте метод removeIf(Predicate<? super E> filter).

Обратите внимание, что это не использует потоковую обработку, как было запрошено в вопросе, но использует лямбдуВыражение, так что это более новый «функциональный» синтаксис Java 8.

res.getAllLists().removeIf(list -> dataRes.getData().getId().equalsIgnoreCase(
                                       String.valueOf(list.getId())));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...