Фільтрація масивів та декомпозиція предикатів у Java 8

Іноді виникає дуже просте завдання. Ви маєте List і з нього потрібно за заданою умовою видалити елементи (саме не повернути новий List, а модифікувати існуючий).

Наскільки мені відомо, до Java 8 найелегантніший спосіб вирішення подібного завдання був наступним (тут і нижче за текстом я розглядаю List >):

У Java 8 у List'a з'явився метод removeIf(), який вирішує це дуже тривіально:

Метод removeIf() отримує на вхід Predicate. Предикат, це особливий різновид функціонального інтерфейсу, який отримує на вхід T, а повертає boolean. З предикатами в Stream API доведеться мати справу досить часто і тому буде корисно пам'ятати, що предикати підтримують операції заперечення (negate()) і декомпозиції (and() і or()).

Ми отримаємо стрім який містить всі об'єкти, у яких значення COLUMN_START - false, а COLUMN_END - true. Очевидно, що штучний приклад і декомпозиція предикатів буде використовуватися, наприклад, для дотримання DRY.

Ну і наостанок, як чудово в Java 8 працює type inference. Майже як у Scala!

А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»

Написав гарний текст – отримав запрошення.

У «Пісочниці» діє премодерація: перед публікацією всі матеріали проходять через дбайливе проміння НЛО.

З великою ймовірністю не пройдуть премодерацію: