While you can use either forEach(list::add)
or collect
with a Stream
, collect
is by far the
better choice because it's automatically thread-safe and parallellizable.
List<String> bookNames = new ArrayList<>(); books.stream().filter(book -> book.getIsbn().startsWith("0")) .map(Book::getTitle) .forEach(bookNames::add); // Noncompliant
List<String> bookNames = books.stream().filter(book -> book.getIsbn().startsWith("0")) .map(Book::getTitle) .collect(Collectors.toList());