Commit 4dd19316 by Patryk Czarnik

przykłady grupowania

parent 3000b8fc
package emps.strumieniowo;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Grupowanie1 {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
Map<String, List<Employee>> grupy = emps.stream().collect(Collectors.groupingBy(Employee::getJobTitle));
// Dla każdego stanowiska mamy listę pracowników.
// Zawartość tych kolekcji wypiszemy również w sposób "funkcyjny":
grupy.forEach((job, lista) -> {
System.out.println("Pracownicy na stanowisku " + job + ": ");
lista.forEach(emp -> {
System.out.println(" * " + emp.getFirstName() + " " + emp.getLastName());
});
System.out.println();
});
}
}
package emps.strumieniowo;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Grupowanie2 {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
// Drugi parametr kolektora groupingBy określa "co zrobić z każdą grupą" i też ma być kolektorem.
// W tym przypadku dla każdej grupy pracowników obliczamy średnią pensję.
Map<String, Double> srednie = emps.stream()
.collect(Collectors.groupingBy(Employee::getJobTitle,
Collectors.averagingInt(Employee::getSalary)));
srednie.forEach((job, avg) -> System.out.printf("%32s → %8.2f\n", job, avg));
}
}
package emps.strumieniowo;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;
public class Grupowanie3 {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
// Parametr TreeMap::new to jest "przepis na pusty słownik" i chodzi tu o to, aby został uzyty TreeMap zamiast HashMap.
// Dane są posortowane.
// Dla każdej grupy obliczymy tutaj "statystyki" a nie tylko średnią.
Map<String, IntSummaryStatistics> srednie = emps.stream()
.collect(Collectors.groupingBy(Employee::getJobTitle,
TreeMap::new,
Collectors.summarizingInt(Employee::getSalary)));
System.out.println(" Stanowisko | ile| min | średnia | max | suma |");
srednie.forEach((job, stats) -> System.out.printf(" %-32s | %2d | %8d | %8.2f | %8d | %10d |\n",
job, stats.getCount(), stats.getMin(), stats.getAverage(), stats.getMax(), stats.getSum()));
}
}
package emps.strumieniowo;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Podzial {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
// Szczególnym rodzajem grupowania jest podział danych na dwie grupy zwn warunek logiczny.
Map<Boolean, List<Employee>> grupy = emps.stream().collect(
Collectors.partitioningBy(emp -> emp.getSalary() >= 10_000));
System.out.println("Bogaci:");
grupy.get(true).forEach(emp -> {
System.out.println(" * " + emp.getFirstName() + " " + emp.getLastName());
});
System.out.println();
System.out.println("Biedni:");
grupy.get(false).forEach(emp -> {
System.out.println(" * " + emp.getFirstName() + " " + emp.getLastName());
});
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment