Using Collectors.toList instead of forEach and a new ArrayList I have the following Java 8+ code (on Java 14).  I have a (terminal) forEach call and I am adding each mapped object to a newly created ArrayList.
Is there a more idiomatic way this could be rewritten using Collectors.toList() and potentially flatMap?
public List&lt;SearchSuggestion&gt; suggest() {
   List&lt;Watchlist&gt; watchlists = someService.findAll();
   List&lt;SearchSuggestion&gt; suggestions = new ArrayList&lt;&gt;();

   watchlists.forEach(watchlist -&gt; watchlist.getWatchlistItems()
            .forEach(watchlistItem -&gt; {
                suggestions.add(mapToSearchSuggestion(watchlistItem.getInstrument()));
            })
   );
   return suggestions;
}

private SearchSuggestion mapToSearchSuggestion(Instrument instrument) {
    return SearchSuggestion.builder()
            .symbol(instrument.getSymbol())
            .build();
}
This is one way using flatMap and Collectors.toList():
public List&lt;SearchSuggestion&gt; suggest() {
   return someService.findAll().stream()
            .flatMap(wl-&gt;wl.getWatchlistItems().stream())
            .map(wli-&gt;mapToSearchSuggestion(wli.getInstrument()))
            .collect(Collectors.toList());
}

However (since this is Code Review) the method mapToSearchSuggestion seems more appropriate to be in the class Instrument. If you can move it there then the function becomes:
public List&lt;SearchSuggestion&gt; suggest() {
    return watchlists.stream()
            .flatMap(wl -&gt;wl.getWatchlistItems().stream())
            .map(WatchlistItem::getInstrument)
            .map(Instrument::mapToSearchSuggestion)
            .collect(Collectors.toList());
}

Instrument class:
public class Instrument {
    //...
    public SearchSuggestion mapToSearchSuggestion() {
        return SearchSuggestion.builder().symbol(getSymbol()).build();
    }
    //...
}