Я пропоную вам спочатку спробувати зрозуміти Java 8 у цілому, головне у вашому випадку це будуть потоки, лямбди та посилання на методи.
Ти ніколи не повинен перетворювати існуючий код у код Java 8 по черзі, ви повинні витягувати функції та перетворювати їх.
У вашому першому випадку я визначив наступне:
- Ви хочете додати елементи вхідної структури до списку вихідних даних, якщо вони відповідають якомусь предикату.
Давайте подивимося, як ми це робимо, ми можемо зробити це наступним чином:
List<Player> playersOfTeam = players.stream()
.filter(player -> player.getTeam().equals(teamName))
.collect(Collectors.toList());
Що ви тут робите:
- Перетворіть свою структуру введення в потік (я тут припускаю, що вона має тип
Collection<Player>, тепер у вас є файл Stream<Player>.
- Відфільтруйте всі небажані елементи за допомогою a
Predicate<Player>, зіставляючи кожного гравця з логічним значенням true, якщо його бажають зберегти.
- Зберіть отримані елементи у списку за допомогою a
Collector, тут ми можемо використовувати один із стандартних колекторів бібліотек, яким є Collectors.toList().
Це також включає ще два моменти:
- Код проти інтерфейсів, тому код проти
List<E>overArrayList<E> .
- Використовуйте алмазний умовивід для параметра типу в
new ArrayList<>(), ви все-таки використовуєте Java 8.
Тепер про вашу другу точку:
Ви знову хочете перетворити щось із застарілої Java на Java 8, не дивлячись на загальну картину. На цю частину вже відповів @IanRoberts , хоча я думаю, що вам потрібно зробити players.stream().filter(...)...більше, ніж він запропонував.