Ho una situazione inaspettata in un progetto in cui tutti i tipi che estendono una classe vengono inseriti in una raccolta Java; ma solo un'estensione specifica di quella classe contiene un metodo aggiuntivo. Chiamiamolo "anche ()"; e vorrei essere chiaro che nessun'altra estensione ce l'ha. Subito prima di eseguire un'attività su ogni elemento di quella raccolta, devo chiamare anche () su ogni elemento che lo implementa.
La via più semplice è questa:
stuff.stream().filter(item -> item instanceof SpecificItem)
.forEach(item -> ((SpecificItem)item).also()));
stuff.stream().forEach(item -> item.method());
Funziona bene, ma non mi sento a mio agio con l '"instanceof" lì dentro. Questo è generalmente un segno di cattivo odore di codice. È molto probabile che rifatterò questa classe solo per liberarmene. Prima di fare qualcosa di così drammatico, pensavo di controllare con la community e vedere se qualcuno con più esperienza con stream o collezioni aveva una soluzione più semplice.
Come esempio (certamente non esclusivo), è possibile ottenere una vista di una collezione che filtra le voci per classe?