Commit b17a5438 by Patryk Czarnik

grupowanie 2

parent 8b94af90
......@@ -15,7 +15,7 @@ public class Grupowanie3 {
for(Employee emp : emps) {
// co wstawić w razie braku danych (gdy dane już są - krok jest pomijany)
sumy.putIfAbsent(emp.getJobTitle(), 0);
// w jaki sposób uzyskuje się nową wartość na podstawie klucza oraz starej wartości
// w jaki sposób uzyskuje się nową wartość na podstawie klucza oraz starej wartości
sumy.computeIfPresent(emp.getJobTitle(), (job, staraSuma) -> staraSuma + emp.getSalary());
ilosci.putIfAbsent(emp.getJobTitle(), 0);
......
......@@ -19,6 +19,7 @@ public class Grupowanie4 {
Map<String, Integer> ilosci = new TreeMap<>();
for(Employee emp : emps) {
// sumy.merge(emp.getJobTitle(), emp.getSalary(), (staraSuma, zmiana) -> staraSuma+zmiana);
sumy.merge(emp.getJobTitle(), emp.getSalary(), Integer::sum);
ilosci.merge(emp.getJobTitle(), 1, Integer::sum);
}
......
package emps;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;
public class Grupowanie4a {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj();
// można też koncepcji mergowania użyć za pośrednictwem collectora "toMap"
Map<String, Integer> sumy = emps.stream()
.collect(Collectors.toMap(Employee::getJobTitle, Employee::getSalary, Integer::sum));
Map<String, Integer> ilosci = emps.stream()
.collect(Collectors.toMap(Employee::getJobTitle, emp -> 1, Integer::sum));
for(String job : sumy.keySet()) {
int suma = sumy.get(job);
int ile = ilosci.get(job);
double srednia = (double)suma / ile;
System.out.printf("| %-32s | %2d | %8.2f |%n", job, ile, srednia);
}
}
}
......@@ -14,6 +14,7 @@ public class Grupowanie6 {
for(Employee emp : emps) {
final String jobTitle = emp.getJobTitle();
JobInfo jobInfo = mapa.get(jobTitle);
if(jobInfo == null) {
jobInfo = new JobInfo(jobTitle);
......
package emps;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Grupowanie7 {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj();
// groupingBy zwraca słownik, w którym dla każdej wartości kryterium znajduje się lista wszystkich obiektów należących do tej grupy
Map<String, List<Employee>> grupy = emps.stream().collect(Collectors.groupingBy(Employee::getJobTitle));
grupy.forEach((job, lista) -> {
System.out.println(job);
lista.forEach(emp -> System.out.println(" * " + emp.getFirstName() + " " + emp.getLastName()));
System.out.println();
});
}
}
package emps;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Grupowanie8 {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj();
Map<String, Double> grupy = emps.stream()
.collect(Collectors.groupingBy(Employee::getJobTitle,
Collectors.averagingInt(Employee::getSalary)));
grupy.forEach((job, srednia) -> System.out.printf("%32s → %8.2f%n", job, srednia));
}
}
package emps;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;
// W tej wersji dla każdej grupy od razu obliczymy "statystyki"
// Podajemy też konstruktor klasy TreeMap, aby został utworzony słownik tego typu
public class Grupowanie9 {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj();
Map<String, IntSummaryStatistics> grupy = emps.stream()
.collect(Collectors.groupingBy(
Employee::getJobTitle,
TreeMap::new,
Collectors.summarizingInt(Employee::getSalary)));
grupy.forEach((job, stats) -> {
// System.out.printf("%-32s → %s%n", job, stats);
System.out.printf("| %-32s | %2d | %5d | %8.2f | %5d |%n",
job, stats.getCount(), stats.getMin(), stats.getAverage(), stats.getMax());
});
}
}
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