Iterations
Streams allow us to write
collections code at a higher level of abstraction.

package com.minte9.lambdas.streams;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class Iterations {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3);
int count = 0;
for(int n : numbers) {
if (n <= 2) count++;
}
System.out.println(count);
Iterator<Integer> it = numbers.iterator();
while(it.hasNext()) {
int n = it.next();
if (n <= 2) count++;
}
System.out.println(count);
long total = 0;
total = numbers.stream()
.filter(n -> n <= 2)
.count();
System.out.println(total);
}
}
Lazy
Stream library was design to iterate
only once (lazy evaluation).

package com.minte9.lambdas.streams;
import java.util.Arrays;
import java.util.List;
public class Lazy {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3);
numbers.stream().filter(n -> {
System.out.println(n);
return n <= 2;
});
numbers.stream().filter(n -> {
System.out.println(n);
return n <= 2;
}).count();
}
}