Commit 91bf7f37 by Patryk Czarnik

Liczenie średniej i filtrowanie Jobów

parent 716e1a62
...@@ -8,10 +8,10 @@ public class F4_SredniaWszystkich { ...@@ -8,10 +8,10 @@ public class F4_SredniaWszystkich {
public static void main(String[] args) { public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv"); List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
double avg = emps.stream() double avg = emps.stream() //
.mapToInt(Employee::getSalary) // równoważne lambdzie: emp -> emp.getSalary() .mapToInt(Employee::getSalary) // równoważne lambdzie: emp -> emp.getSalary()
.average() .average() //
.orElse(0.0); .orElse(0.0); //
System.out.println(avg); System.out.println(avg);
double avg2 = emps.stream().collect(Collectors.averagingInt(Employee::getSalary)); double avg2 = emps.stream().collect(Collectors.averagingInt(Employee::getSalary));
......
package emps;
import java.util.List;
public class F5_SredniaProgramistow {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
double avg = emps.stream()
.filter(emp -> "Programmer".equals(emp.getJobTitle()))
.mapToInt(Employee::getSalary)
.average()
.orElse(0.0);
System.out.println(avg);
}
}
package emps;
import java.util.List;
import java.util.OptionalDouble;
import javax.swing.JOptionPane;
public class F6a_SredniaWybranych {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
String szukanyJob = JOptionPane.showInputDialog("Podaj nazwę stanowiska");
if(szukanyJob == null) {
return;
}
OptionalDouble avg = emps.stream()
.filter(emp -> szukanyJob.equalsIgnoreCase(emp.getJobTitle()))
.mapToInt(Employee::getSalary)
.average();
if(avg.isPresent()) {
JOptionPane.showMessageDialog(null, "Średnia wynosi " + avg.getAsDouble());
} else {
JOptionPane.showMessageDialog(null, "Nikt nie pracuje na takim stanowisku", "Brak danych", JOptionPane.WARNING_MESSAGE);
}
}
}
package emps;
import java.io.File;
import java.util.List;
import java.util.OptionalDouble;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;
public class F6b_SredniaWybranychInteraktywnie {
public static void main(String[] args) {
JFileChooser chooser = new JFileChooser(".");
chooser.setFileFilter(new FileNameExtensionFilter("pliki CSV", "csv", "txt"));
int coSieStalo = chooser.showOpenDialog(null);
if(coSieStalo != JFileChooser.APPROVE_OPTION) {
// jeśli było Cancel lub wystąpił błąd
return;
}
File plik = chooser.getSelectedFile();
List<Employee> emps = ObslugaCSV.wczytaj(plik);
Object[] jobs = emps.stream()
.map(Employee::getJobTitle)
.distinct()
.sorted()
.toArray();
Object szukanyJob = JOptionPane.showInputDialog(null, "Wybierz stanowisko",
"Pytanie", JOptionPane.QUESTION_MESSAGE, null, jobs, null);
if(szukanyJob == null) {
return;
}
OptionalDouble avg = emps.stream()
.filter(emp -> szukanyJob.equals(emp.getJobTitle()))
.mapToInt(Employee::getSalary)
.average();
if(avg.isPresent()) {
JOptionPane.showMessageDialog(null, "Średnia wynosi " + avg.getAsDouble());
} else {
JOptionPane.showMessageDialog(null, "Nikt nie pracuje na takim stanowisku", "Brak danych", JOptionPane.WARNING_MESSAGE);
}
}
}
...@@ -11,10 +11,17 @@ import java.util.Scanner; ...@@ -11,10 +11,17 @@ import java.util.Scanner;
// Jest to zestaw metod statycznych. Jak moduł w Pythonie czy C++. // Jest to zestaw metod statycznych. Jak moduł w Pythonie czy C++.
public class ObslugaCSV { public class ObslugaCSV {
// Przeciążanie (overloading) to taka sytuacja, że w klasie mamy kilka wersji metody o tej samej nazwie.
// Poszczególne wersje różnią się liczbą lub typem parametrów.
public static List<Employee> wczytaj(String sciezka) { public static List<Employee> wczytaj(String sciezka) {
return wczytaj(new File(sciezka));
}
public static List<Employee> wczytaj(File plik) {
List<Employee> emps = new ArrayList<>(); List<Employee> emps = new ArrayList<>();
// try with resources - od Java 7 - automatyczne zamykanie plików i innych zasobów // try with resources - od Java 7 - automatyczne zamykanie plików i innych zasobów
try(Scanner scanner = new Scanner(new File(sciezka))) { try(Scanner scanner = new Scanner(plik)) {
scanner.nextLine(); // pomijamy pierwszą linię z nagłówkami scanner.nextLine(); // pomijamy pierwszą linię z nagłówkami
while(scanner.hasNextLine()) { while(scanner.hasNextLine()) {
String linia = scanner.nextLine(); String linia = scanner.nextLine();
......
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