В процессе работы с коллекциями в Java 8 часто приходится сталкиваться с потоками данных (Streams). Одной из распространенных задач является необходимость фильтрации данных в коллекции и получение нового списка на основе отфильтрованных данных. Например, можно столкнуться с задачей извлечения из исходного списка чисел всех чисел, которые больше определенного значения.
В такой ситуации обычно используется метод stream()
, предоставляемый коллекциями в Java 8, с последующим применением метода filter()
. Однако, после фильтрации данных, часто возникает необходимость получить новый список с результатами. Возможно, вы уже пробовали добавить отфильтрованные элементы в новый список с помощью метода forEach()
, но это не самый удобный и элегантный способ.
List<Long> sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L); List<Long> targetLongList = new ArrayList<>(); sourceLongList.stream().filter(l -> l > 100).forEach(targetLongList::add);
Вместо этого, можно использовать метод collect()
, который позволяет нам обрабатывать и собирать элементы потока в различные структуры данных, включая коллекции. В частности, для получения нового списка можно использовать встроенный в Java 8 метод Collectors.toList()
:
List<Long> sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L); List<Long> targetLongList = sourceLongList.stream().filter(l -> l > 100).collect(Collectors.toList());
Теперь targetLongList
— это новый список, который содержит все числа из sourceLongList
больше 100. Таким образом, с помощью метода collect()
и Collectors.toList()
можно эффективно и лаконично преобразовывать отфильтрованные потоки данных обратно в списки.
Добавить комментарий