Я пропоную вам спочатку спробувати зрозуміти 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(...)...
більше, ніж він запропонував.