Ответ 1
Когда вы получаете поток из списка, он не изменяет список. Если вы хотите получить размер потока после фильтрации, вы вызываете count()
на нем.
long sizeAfterFilter =
locales.stream().filter(l -> l.getLanguage().equals("en")).count();
Если вы хотите получить новый список, просто вызовите .collect(toList())
в результирующем потоке. Если вы не беспокоитесь об изменении списка на месте, вы можете просто использовать removeIf
в List
.
locales.removeIf(l -> !l.getLanguage().equals("en"));
Обратите внимание, что Arrays.asList
возвращает список фиксированного размера, поэтому он генерирует исключение, но вы можете обернуть его в ArrayList
или просто собрать содержимое отфильтрованного потока в List
(соответственно ArrayList
), используя Collectors.toList()
(соответственно Collectors.toCollection(ArrayList::new)
).