import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Gatherers;
import java.util.stream.Stream;

public class DemoStream {
    public static void main(String[] args) {
        List<Integer> dati = List.of(1, 2, 3, 4, 5, 6, 3);
        List<Integer> senzaTre = dati.stream()
                .filter(numero -> numero != 3)
                .toList();
        System.out.println(senzaTre);
        System.out.println(dati);

        List<String> parole = Stream.of("Java,Reti", "API")
                .flatMap(riga -> Stream.of(riga.split(",")))
                .toList();
        System.out.println(parole);

        List<List<Integer>> finestre = dati.stream()
                .gather(Gatherers.windowFixed(3))
                .toList();
        System.out.println(finestre);

        Map<Integer, List<String>> perLunghezza = parole.stream()
                .collect(Collectors.groupingBy(String::length));
        System.out.println(perLunghezza.get(4));

        String conteggioESomma = dati.stream().collect(Collectors.teeing(
                Collectors.counting(),
                Collectors.summingInt(Integer::intValue),
                (conteggio, somma) -> conteggio + " elementi, somma " + somma));
        System.out.println(conteggioESomma);
    }
}
