import java.util.*;
import java.util.function.Predicate;

class Stream2 {
	public static void main(String[] args) {

		ArrayList<Integer> list = new ArrayList<>();
		for(int i = 0; i < 10; i++) {
			list.add((int) (Math.random() * 100));
		}
		list.stream().forEach(Stream2::print);
		System.out.println();

		list.stream().filter(new GT50()).forEach(Stream2::print);
		System.out.println();

		list.stream().filter(new Predicate<Integer>() {
			public boolean test(Integer e) {
				return e > 50;	
			}
		}).forEach(Stream2::print);
		System.out.println();

		list.stream().filter((e) -> {
			return e > 50;
		}).forEach(Stream2::print);
		System.out.println();
	
		list.stream().filter(e -> e > 50).forEach(Stream2::print);
		System.out.println();

		list.stream().filter(Stream2::gt50).forEach(Stream1::print);
		System.out.println();

		// print evens
		list.stream().filter(e -> e % 2 == 0).forEach(Stream1::print);
		System.out.println();

		list.stream()
			.filter(e -> (e % 2 == 0) && (e > 50))
			.forEach(Stream1::print);
		System.out.println();

		list.stream()
			.filter(e -> e % 2 == 0)
			.filter(e -> e > 50)
			.forEach(Stream1::print);
		System.out.println();

	}

	public static void print(Integer e) {
		System.out.print(e + " ");
	}

	public static boolean gt50(Integer e) {
		return e > 50;
	}


} // End of Stream2

class GT50 implements Predicate<Integer> {
	public boolean test(Integer e) {
		return e > 50;	
	}
}

