package ch.fhnw.oop2.lecture4;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
/**
* Created by Kelvin on 15-Mar-16.
*/
public class Lecture4 {
public static void main(String[] args) {
streamsExercise1();
System.out.println("+++++++++++++++++++++++++");
streamsExercise2();
System.out.println("+++++++++++++++++++++++++");
streamsExercise3();
System.out.println("+++++++++++++++++++++++++");
streamsExercise4();
System.out.println("+++++++++++++++++++++++++");
streamsExercise5();
System.out.println("+++++++++++++++++++++++++");
streamsExercise6();
System.out.println("+++++++++++++++++++++++++");
streamsExercise7();
}
public static void lambda() {
List<String> cities = new ArrayList<>(Arrays.asList(
"Bern", "Basel", "Aarau", "Zürich",
"Lugano", "Locarno", "Ascona", "Winterthur",
"St. Gallen"));
cities.removeIf(city -> !(city.charAt(0) == 'A' || city.charAt(0) == 'B'));
cities.sort((x, y) -> (y.compareTo(x)));
cities.forEach(System.out::println);
List lengths = new ArrayList<>(cities);
lengths.replaceAll( x -> ((String) x).length());
lengths.forEach(System.out::println);
}
public static void streams() {
Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8).stream()
.filter(n -> {
System.out.println("filtering " + n);
return n % 2 == 0;
})
.map(n -> {
System.out.println("mapping " + n);
return n * n;
})
.limit(2)
.forEach(System.out::println);
}
public static void streamsExercise1() {
List<String> cities = Arrays.asList(
"Bern", "Basel", "Aarau", "Zürich",
"Lugano", "Locarno", "Ascona", "Winterthur",
"St. Gallen");
cities.stream()
.filter(x -> x.startsWith("L"))
.forEach(System.out::println);
}
public static void streamsExercise2() {
List<String> cities = Arrays.asList(
"Bern", "Basel", "Aarau", "Zürich",
"Lugano", "Locarno", "Ascona", "Winterthur",
"St. Gallen");
cities.stream()
.sorted((x,y) -> Integer.compare(x.length(), y.length()))
.map( x -> new StringBuilder(x).reverse())
.forEach(System.out::println);
System.out.println("++++++++++++++++++++++++++++++++++");
System.out.println(cities.stream().max( (x, y) -> x.length() > y.length() ? 1 : -1).get());
System.out.println("++++++++++++++++++++++++++++++++++");
System.out.println(cities.stream().min((x, y) -> x.length() - y.length()).get());
System.out.println("++++++++++++++++++++++++++++++++++");
cities.stream().limit(4).forEach(System.out::println);
System.out.println("++++++++++++++++++++++++++++++++++");
cities.stream().skip(cities.size() - 3).forEach(System.out::println);
System.out.println("++++++++++++++++++++++++++++++++++");
System.out.println(cities.stream().count() == 0);
System.out.println("++++++++++++++++++++++++++++++++++");
List li = cities.stream().collect(Collectors.toList());
Map ma = cities.stream().collect(Collectors.toMap(t -> t, t -> t ));
Set se = cities.stream().collect(Collectors.toSet());
}
public static void streamsExercise3() {
Stream stream = Stream.of("Java", "8", "is great");
System.out.println(stream.collect(Collectors.joining(".")).toString());
}
public static void streamsExercise4() {
int[] primes = {2, 3, 5, 7, 11, 13};
System.out.println(Arrays.stream(primes).sum());
}
public static void streamsExercise5() {
System.out.println(Stream.iterate(2, f -> f + 2)
.limit(99)
.mapToInt(Integer::intValue)
.sum());
}
public static void streamsExercise6() {
Stream.generate(() -> (int) (10*Math.random()))
.limit(20)
.forEach(System.out::println);
}
public static void streamsExercise7() {
IntStream.iterate(1, i -> i + 1).limit(5).forEach(System.out::println);
}
}