Streams provide a high level abstraction. This is good for making code clear and easy to understand, but it is bad for debugging. But the peek () method can be used to find what is happening between methods.

 

A simple example :

List<String> list = Arrays.asList(

        "BarCamp", "MongoDB", "10Gen", "TokuMX", "Nagios", "PUCMM", "Ruby", "JSON", "JSON");


List<String> newList1 = list
            .stream()
            .filter(s -> (s.length() % 2)==1)
            .map(String::toLowerCase)
            .peek(System.out::println)
            .collect(Collectors.toList());

Selection_332.png

Also, you can use the peek method to put a breakpoint while you are debugging with your favorite IDE.

 

List<String> newList1 = list
            .stream()
            .filter(s -> (s.length() % 2)==1)
            .map(String::toLowerCase)
            .peek(s -> s.toString())
            .collect(Collectors.toList());

 

 

The breakpoint must be set in the peek method.

 

Selection_330.png

 

 

Selection_331.png

Java