package ch.fhnw.oop2.testPrep.lambdas; import java.util.*; import java.util.stream.Collectors; public class LambdaExample{ public static void main(String[] args){ Player bazooka = new Player("Bazooka", "Thunder"); Player crunchy = new Player("Crunchy", "Stormey"); Player darthvd = new Player("Darthvd", "Thunder"); Player earthqk = new Player("Earthqk", "Thunder"); Player faaancy = new Player("Faaancy", "Stormey"); Player chieeef = new Player("Chieeef", "Keeeeef"); List<Score> table = new ArrayList<>(); table.add(new Score(earthqk, 3, 36)); table.add(new Score(bazooka, 4, 99)); table.add(new Score(bazooka, 3, 41)); table.add(new Score(chieeef, 3, 41)); table.add(new Score(crunchy, 4, 72)); table.add(new Score(faaancy, 2, 25)); table.add(new Score(crunchy, 4, 75)); table.add(new Score(darthvd, 4, 96)); // Beispiel 1 : Liste aller Teams (ohne Duplikate) List<String> res_1 = table.stream() .map(score -> score.getPlayer().getTeam()) .distinct() .collect(Collectors.toList()); System.out.println(res_1); // Beispiel 2 : alle Spieler eines Teams, sortiert nach Nickname List<Player> res_2 = table.stream() .map(Score::getPlayer) .filter(player -> player.getTeam().equals("Thunder")) .distinct() .sorted(Comparator.comparing(Player::getName)) .collect(Collectors.toList()); System.out.println(res_2); // Beispiel 3 : gibt es einen Spieler im Team "Blaark"? boolean b = table.stream() .anyMatch(score -> score.getPlayer() .getTeam() .equals("Blaark")); System.out.println(b); // Beispiel 4 : Namen aller Spieler als String String s = table.stream() .map(score -> score.getPlayer().getName()) .distinct() .sorted() // "" indicates the type and is the starting value (n1) accumulator .reduce("", (n1, n2) -> n1 + " " + n2); System.out.println(s); // a) alle Spieler einer bestimmten Runde, nach Punkten sortiert List<Score> res_3 = table.stream() .filter(t -> t.getRound() == 3) .sorted(Comparator.comparing(Score::getPoints)) .collect(Collectors.toList()); System.out.println(res_3); // b) alle Spieler des Teams "Stormey" in das Team "Blaark" umteilen table.stream() .map(Score::getPlayer) .filter(player -> player.getTeam().equals("Stormey")) .forEach(player -> player.setTeam("Blaark")); System.out.println(table); // c) max int max = table.stream() .map(Score::getPoints) // 0 indicates the type and starting value .reduce(0, Integer::max); System.out.println("c: " + max); // Find min differently int min = table.stream() .mapToInt(Score::getPoints) .min() .orElse(0); System.out.println(min); // Find min differently again int min2 = table.stream() .min((o1, o2) -> Integer.compare(o1.getPoints(), o2.getPoints())) .get().getPoints(); System.out.println(min2); // d) wieviele Spieler besitzt das Team "Thunder"? long t = table.stream() .map(Score::getPlayer) .filter(player -> player.getTeam().equals("Thunder")) .distinct() .count(); System.out.println("d: " + t); // e) Summe der Punkte des Teams "Thunder" int p = table.stream() .filter(score -> score.getPlayer().getTeam().equals("Thunder")) .collect(Collectors.summingInt(Score::getPoints)); System.out.println("e: " + p); } }