Sto utilizzando Java 8 streams al posto di molti vecchi style per i loop per scorrere un gruppo di risultati e produrre statistiche di riepilogo. Per esempio:Quando un IntStream è effettivamente chiuso? SonarQube S2095 è un falso positivo per IntStream?
int messages = IntStream.rangeClosed(0, 7).map(ids::get).reduce(Integer::sum).getAsInt();
Nota: So che ci sono altri modi per fare il conteggio che vi mostro qui sopra. Lo sto facendo in questo modo per illustrare la mia domanda.
Sto utilizzando SonarQube 5.3 con il plugin Java 3.9. In questa configurazione, la riga di codice precedente mi dà una violazione della regola calamaro S2095: "Le risorse dovrebbero essere chiuse". Questo è il risultato che mi aspetterei di vedere se un AutoCloseable (ad esempio, un FileInputStream) è stato aperto ma non è mai stato chiuso.
Quindi, ecco la mia domanda: l'operazione del terminale reduce
chiude lo stream? Dovrebbe? O è un falso positivo nella regola del calamaro?
'' '' IntStream'' ha '' 'onClose (Runnable closeHandler)' '' metodo ereditato dalla classe '' 'BaseStream'''. Puoi esaminare quando lo stream è chiuso o non chiuso usando questo gestore. – saka1029
Monitor https://jira.sonarsource.com/browse/SONARJAVA-1478 – PaoloC