Commit c5bfd1f7 by Patryk Czarnik

Statystyki

parent 7a0d122a
package sprzedaz;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class Grupowanie5 {
public static void main(String[] args) {
List<Rekord> lista = ObslugaCSV.wczytaj();
final Map<String, StatystykiDlaMiasta> mapa = new TreeMap<>();
for (Rekord rekord : lista) {
final String miasto = rekord.miasto();
StatystykiDlaMiasta statystyki = mapa.get(miasto);
if (statystyki == null) {
statystyki = new StatystykiDlaMiasta(miasto);
mapa.put(miasto, statystyki);
}
statystyki.update(rekord);
// nie trzeba robić put, bo modyfikuję ten obiekt, który już jest w słowniku
}
for (StatystykiDlaMiasta statystykiZMiasta : mapa.values()) {
System.out.println(statystykiZMiasta);
}
}
// Klasa zgnieżdżona - tylko dla przykładu.
// Równie dobrze mógłbym tę klase zdefiniować w osobnym pliku.
// Obiekt tej klasy przechowuje statystyki job
private static class StatystykiDlaMiasta {
final String miasto;
int count = 0;
BigDecimal sum = BigDecimal.ZERO;
BigDecimal min = null;
BigDecimal max = null;
StatystykiDlaMiasta(String miasto) {
this.miasto = miasto;
}
void update(Rekord rekord) {
BigDecimal wartosc = rekord.wartosc();
count++;
sum = sum.add(wartosc);
if (min == null || wartosc.compareTo(min) < 0) {
min = wartosc;
}
if (max == null || wartosc.compareTo(max) > 0) {
max = wartosc;
}
}
BigDecimal avg() {
return sum.divide(BigDecimal.valueOf(count), 2, RoundingMode.HALF_EVEN);
}
@Override
public String toString() {
return "jobTitle=" + miasto + ", count=" + count + ", sum=" + sum + ", min=" + min + ", max="
+ max + ", avg=" + avg();
}
}
}
package sprzedaz;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Grupowanie7 {
public static void main(String[] args) {
List<Rekord> lista = ObslugaCSV.wczytaj();
Map<String, BigDecimal> sumy = lista.stream()
.collect(Collectors.groupingBy(Rekord::miasto,
Collectors.mapping(Rekord::wartosc,
Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))));
sumy.forEach((miasto, suma) -> System.out.printf("%-10s : %12s%n", miasto, suma));
}
}
package sprzedaz;
import java.util.DoubleSummaryStatistics;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
// Wersja z liczeniem statystyk, czyli coint, sum, avg, min i max jednocześnie
public class Grupowanie9 {
public static void main(String[] args) {
List<Rekord> lista = ObslugaCSV.wczytaj();
Map<String, DoubleSummaryStatistics> sumy = lista.stream()
.collect(Collectors.groupingBy(Rekord::miasto,
Collectors.summarizingDouble(Rekord::wartoscDouble)));
sumy.forEach((miasto, stats) -> System.out.printf("%-10s : %s%n", miasto, stats));
}
}
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