Commit 8b7188e6 by Patryk Czarnik

Przykłady emps z poprzednich zajęć

parent 2929e8e6
package emps.nieobiektowo;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
public class P1_WypiszDane {
public static void main(String[] args) {
// Jak odczytać dane z pliku emps.csv i wypisać dane z poszczególnych rekordów?
try(Scanner scanner = new Scanner(new File("emps.csv"))) {
while(scanner.hasNextLine()) {
String linia = scanner.nextLine();
// System.out.println(linia);
String[] t = linia.split(";");
// System.out.println(Arrays.toString(t));
// wypisanie wybranych pól z rekordu:
System.out.printf("Pracownik nr %s: %s %s (%s) zarabia %s\n",
t[0], t[1], t[2], t[3], t[4]);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
package emps.nieobiektowo;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class P3_SredniaPensja {
public static void main(String[] args) {
try(Scanner scanner = new Scanner(new File("emps.csv"))) {
// wczytuję pierwsza linię, aby ją zignorować , bo tam są nagłówki kolumn
scanner.nextLine();
int suma = 0;
int ile = 0;
while(scanner.hasNextLine()) {
String linia = scanner.nextLine();
String[] t = linia.split(";");
suma += Integer.parseInt(t[4]);
ile++;
}
double srednia = (double)suma / ile;
System.out.println("suma: " + suma);
System.out.println("średnia: " + srednia);
System.out.printf("suma: %d, ilość: %d, średnia: %.2f\n", suma, ile, srednia);
long sredniaWCentach = Math.round(srednia * 100);
System.out.println("średnia to " + (sredniaWCentach / 100)
+ " dolarów i " + (sredniaWCentach % 100) + " centów");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
P3_Srednia - oblicz średnią wszystkich pracowników razem wziętych
package emps.obiektowo;
import java.time.LocalDate;
import java.util.Objects;
// To jest przykład "normalnej klasy" przygotowanej po to, aby tworzyć obiekty tej klasy.
// Na takie klasy mówi się "klasa modelu".
public class Employee {
private int employeeId;
private String firstName;
private String lastName;
private String jobTitle;
private int salary;
private LocalDate hireDate;
private String departmentName;
private String streetAddress;
private String postalCode;
private String city;
private String country;
public Employee(int employeeId, String firstName, String lastName, String jobTitle, int salary, LocalDate hireDate,
String departmentName, String streetAddress, String postalCode, String city, String country) {
this.employeeId = employeeId;
this.firstName = firstName;
this.lastName = lastName;
this.jobTitle = jobTitle;
this.salary = salary;
this.hireDate = hireDate;
this.departmentName = departmentName;
this.streetAddress = streetAddress;
this.postalCode = postalCode;
this.city = city;
this.country = country;
}
public int getEmployeeId() {
return employeeId;
}
public void setEmployeeId(int employeeId) {
this.employeeId = employeeId;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getJobTitle() {
return jobTitle;
}
public void setJobTitle(String jobTitle) {
this.jobTitle = jobTitle;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public LocalDate getHireDate() {
return hireDate;
}
public void setHireDate(LocalDate hireDate) {
this.hireDate = hireDate;
}
public String getDepartmentName() {
return departmentName;
}
public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}
public String getStreetAddress() {
return streetAddress;
}
public void setStreetAddress(String streetAddress) {
this.streetAddress = streetAddress;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
@Override
public String toString() {
return "Employee [employeeId=" + employeeId + ", firstName=" + firstName + ", lastName=" + lastName
+ ", jobTitle=" + jobTitle + ", salary=" + salary + ", hireDate=" + hireDate + ", departmentName="
+ departmentName + ", streetAddress=" + streetAddress + ", postalCode=" + postalCode + ", city=" + city
+ ", country=" + country + "]";
}
@Override
public int hashCode() {
return Objects.hash(city, country, departmentName, employeeId, firstName, hireDate, jobTitle, lastName,
postalCode, salary, streetAddress);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Employee other = (Employee) obj;
return Objects.equals(city, other.city) && Objects.equals(country, other.country)
&& Objects.equals(departmentName, other.departmentName) && employeeId == other.employeeId
&& Objects.equals(firstName, other.firstName) && Objects.equals(hireDate, other.hireDate)
&& Objects.equals(jobTitle, other.jobTitle) && Objects.equals(lastName, other.lastName)
&& Objects.equals(postalCode, other.postalCode) && salary == other.salary
&& Objects.equals(streetAddress, other.streetAddress);
}
}
package emps.obiektowo;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Grupowanie1 {
// Ta wersja jest poprawna pod względem wyników, natomiast nie jest optymalna pod wzgl wydajności.
// Dla każdego joba przeglądamy całą listę pracowników i ifem sprawdzamy czy pasuje.
// Dla 19 stanowisk i 107 pracowników koszt wynosi (19+1)*(107)
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
// etap 1 - zebranie stanowisk bez powtórzeń
Set<String> jobs = new HashSet<>();
for(Employee emp : emps) {
jobs.add(emp.getJobTitle());
}
//System.out.println(jobs);
// etap 2 - dla każdego stanowiska z tego zbioru obliczymy średnią
// przeglądając za każdym razem całą listę pracowników
for (String job : jobs) {
int ile = 0;
int suma = 0;
for(Employee emp : emps) {
if(emp.getJobTitle().equals(job)) {
suma += emp.getSalary();
ile++;
}
}
double srednia = (double)suma / ile;
System.out.printf("| %-32s | %2d | %8.2f |\n", job, ile, srednia);
}
}
}
package emps.obiektowo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Grupowanie2 {
// W tej wersji widzimy klasyczny schemat grupowania za pomocą słowników - algorytm, który warto znać.
// Używamy wyłącznie podstawowych metod get, put i containsKey.
// W kolejnych wersjach zobaczymy skrócone zapisy z wykorzystaniem nowych metod od Javy 8.
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
Map<String, Integer> sumy = new HashMap<>();
Map<String, Integer> ilosci = new HashMap<>();
for(Employee emp : emps) {
if(sumy.containsKey(emp.getJobTitle())) {
// kolejny pracownik z tego stanowiska → do starej sumy trzeba dodać pensję tego pracownika
int suma = sumy.get(emp.getJobTitle());
sumy.put(emp.getJobTitle(), suma + emp.getSalary());
int ilosc = ilosci.get(emp.getJobTitle());
ilosci.put(emp.getJobTitle(), ilosc+1);
} else {
// pierwszy pracownik z tego stanowiska → wpisujemy jego pensję jako pierwszą wartość
sumy.put(emp.getJobTitle(), emp.getSalary());
ilosci.put(emp.getJobTitle(), 1);
}
}
// System.out.println(sumy);
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);
}
}
}
package emps.obiektowo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Grupowanie2a {
// W tej wersji widzimy klasyczny schemat grupowania za pomocą słowników - algorytm, który warto znać.
// Używamy wyłącznie podstawowych metod get, put i containsKey.
// W kolejnych wersjach zobaczymy skrócone zapisy z wykorzystaniem nowych metod od Javy 8.
public static void main(String[] args) {
final List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
final Map<String, Integer> sumy = new HashMap<>();
final Map<String, Integer> ilosci = new HashMap<>();
for(Employee emp : emps) {
final String jobTitle = emp.getJobTitle();
if(sumy.containsKey(jobTitle)) {
sumy.put(jobTitle, sumy.get(jobTitle) + emp.getSalary());
ilosci.put(jobTitle, ilosci.get(jobTitle) + 1);
} else {
sumy.put(jobTitle, emp.getSalary());
ilosci.put(jobTitle, 1);
}
}
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);
}
}
}
package emps.obiektowo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Grupowanie3 {
// Tutaj używamy getOrDefault i nie musimy pisać ifa
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
Map<String, Integer> sumy = new HashMap<>();
Map<String, Integer> ilosci = new HashMap<>();
for(Employee emp : emps) {
int suma = sumy.getOrDefault(emp.getJobTitle(), 0);
sumy.put(emp.getJobTitle(), suma + emp.getSalary());
int ilosc = ilosci.getOrDefault(emp.getJobTitle(), 0);
ilosci.put(emp.getJobTitle(), ilosc+1);
}
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);
}
}
}
package emps.obiektowo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Grupowanie4 {
// Tutaj używamy operacji z zaszytym ifem i nie musimy pisać ifa
// Do operacji typu compute przekauzje się funkcję, która ma za zadanie zaktualizować wartość w słowniku.
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
Map<String, Integer> sumy = new HashMap<>();
Map<String, Integer> ilosci = new HashMap<>();
for(Employee emp : emps) {
sumy.putIfAbsent(emp.getJobTitle(), 0);
sumy.computeIfPresent(emp.getJobTitle(), (k, v) -> v + emp.getSalary());
ilosci.putIfAbsent(emp.getJobTitle(), 0);
ilosci.computeIfPresent(emp.getJobTitle(), (k, v) -> v + 1);
}
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);
}
}
}
package emps.obiektowo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Grupowanie5 {
// działanie merge na przykładzie sumy:
// zaglądamy pod klucz emp.getJobTitle():
// - jeśli tam jeszcze nic nie ma → wstawiana jest wartość getSalary()
// - jeśli już coś było, to do starej wartości dodawane jest getSalary
// za pomocą funkcji podanej w trzecim argumencie.
// Tutaj jest to funkcja sum (dodawanie), a więc liczby matematycznie sumowane.
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
Map<String, Integer> sumy = new HashMap<>();
Map<String, Integer> ilosci = new HashMap<>();
for(Employee emp : emps) {
sumy.merge(emp.getJobTitle(), emp.getSalary(), Integer::sum);
ilosci.merge(emp.getJobTitle(), 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);
}
}
}
package emps.obiektowo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class MergeDodatkowe {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
Map<String, String> mapa = new HashMap<>();
// przykład pokazujący, że merge działa też dla innych typów niż liczbowe
// uwaga: łączenie tekstów w ten sposób (za pomocą concat lub + w pętli) jest mało wydajny - to nie jest wzór do naśladowania
// prawidłowo byłoby uzyć StringBuildera w pętli lub Collectors.join
for(Employee emp : emps) {
mapa.merge(emp.getJobTitle(), emp.getLastName(), String::concat);
}
for (Entry<String, String> entry : mapa.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
package emps.obiektowo;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// Klasa narzędziowa ("utility class") zawierająca operacje wczytywania i zapisywania danych pracowników z/do pliku CSV.
public class ObslugaCSV {
private static final String NAGLOWEK = "employee_id;first_name;last_name;job_title;salary;hire_date;department_name;address;postal_code;city;country";
private static final String SEP = ";";
// Aby uniemożliwić innym programistom tworzenie obiektów tej klasy (bo wszystko jest tu statyczne i tworzenie obiektów nie ma sensu)
// można umieścić tu prywatny konstruktor domyślny - wtedy nikt go nie wywoła.
private ObslugaCSV() {
}
public static List<Employee> wczytaj(File plik) {
List<Employee> emps = new ArrayList<>();
try(Scanner scanner = new Scanner(plik)) {
scanner.nextLine();
while(scanner.hasNextLine()) {
String linia = scanner.nextLine();
String[] t = linia.split(SEP, 11);
Employee emp = new Employee(Integer.parseInt(t[0]), t[1], t[2], t[3],
Integer.parseInt(t[4]), LocalDate.parse(t[5]), t[6], t[7], t[8], t[9], t[10]);
emps.add(emp);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return emps;
}
public static List<Employee> wczytaj(String sciezka) {
return wczytaj(new File(sciezka));
}
public static void zapisz(List<Employee> lista, File plik) {
try(PrintWriter out = new PrintWriter(plik)) {
out.println(NAGLOWEK);
for (Employee emp : lista) {
out.print(emp.getEmployeeId());
out.print(SEP);
out.print(emp.getFirstName());
out.print(SEP);
out.print(emp.getLastName());
out.print(SEP);
out.print(emp.getJobTitle());
out.print(SEP);
out.print(emp.getSalary());
out.print(SEP);
out.print(emp.getHireDate());
out.print(SEP);
out.print(emp.getDepartmentName());
out.print(SEP);
out.print(emp.getStreetAddress());
out.print(SEP);
out.print(emp.getPostalCode());
out.print(SEP);
out.print(emp.getCity());
out.print(SEP);
out.print(emp.getCountry());
out.println();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void zapisz(List<Employee> lista, String sciezka) {
zapisz(lista, new File(sciezka));
}
}
package emps.obiektowo;
import java.util.List;
public class P0_WczytajDane {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
System.out.println("Wczytano " + emps.size() + " rekordów:");
for(Employee emp : emps) {
System.out.println(emp);
}
}
}
package emps.obiektowo;
import java.util.List;
public class P1_WypiszWybranePola {
public static void main(String[] args) {
// Dla każdego pracownika z pliku wypisz jego imię, nazwisko, stanowisko i pensję.
// Pracownik Steven King (President) zarabia 24000.
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
for(Employee emp : emps) {
// System.out.println( emp.getFirstName() + " " + emp.getLastName() + " " + emp.getSalary());
System.out.printf("Pracownik nr %d: %s %s (%s) zarabia %d\n",
emp.getEmployeeId(), emp.getFirstName(), emp.getLastName(), emp.getJobTitle(), emp.getSalary());
}
}
}
package emps.obiektowo;
import java.util.List;
public class P2_WypiszBogatych {
public static void main(String[] args) {
// Wypisz tylko tych pracowników, którzy zarabiają co najmniej 10 tys
// i policz ilu jest jest
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
int ilu = 0;
for(Employee emp : emps) {
if(emp.getSalary() >= 10_000) {
System.out.printf("%s %s (%s) - %d\n", emp.getFirstName(), emp.getLastName(), emp.getJobTitle(), emp.getSalary());
ilu++;
}
}
System.out.printf("\nZnaleziono %d pracowników o pensji >= 10 tys.\n", ilu);
}
}
package emps.obiektowo;
import java.util.List;
import java.util.Locale;
public class P3_SredniaPensja {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
double suma = 0;
for (Employee emp : emps) {
suma += emp.getSalary();
}
double srednia = suma / emps.size();
System.out.println("Średnia pensja wszystkich: " + srednia);
System.out.printf("Średnia pensja wszystkich: %.2f\n", srednia);
System.out.printf(Locale.US, "Średnia pensja wszystkich: %.2f\n", srednia);
}
}
package emps.obiektowo;
import java.util.List;
public class P4_SredniaProgramistow {
// Program oblicza średnią pensję osób na stanowisku Programmer
// (jobTitle)
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
double suma = 0;
int ile = 0;
for (Employee emp : emps) {
if(emp.getJobTitle().equals("Programmer")) {
suma += emp.getSalary();
ile++;
}
}
double srednia = suma / ile;
System.out.println("Średnia pensja programistów " + srednia);
}
}
package emps.obiektowo;
import java.io.File;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;
public class P4a_SredniaWybranych_Interaktywnie {
// W tej wersji uzytkownik będzie mógł wybrać plik z dysku i wskazać stanowisko, dla którego ma być wylicozna średnia.
public static void main(String[] args) {
JFileChooser chooser = new JFileChooser(".");
chooser.setDialogTitle("Wybierz plik z danymi pracowników");
chooser.setFileFilter(new FileNameExtensionFilter("Plii CSV", "csv", "txt"));
int coSieStalo = chooser.showOpenDialog(null);
if(coSieStalo != JFileChooser.APPROVE_OPTION) {
return;
}
File wybranyPlik = chooser.getSelectedFile();
List<Employee> emps = ObslugaCSV.wczytaj(wybranyPlik);
String wybranyJob = JOptionPane.showInputDialog("Podaj nazwę stanowiska:");
double suma = 0;
int ile = 0;
for (Employee emp : emps) {
if(emp.getJobTitle().equalsIgnoreCase(wybranyJob)) {
suma += emp.getSalary();
ile++;
}
}
double srednia = suma / ile;
JOptionPane.showMessageDialog(null, "Średnia pensja na stanowisku " + wybranyJob + " wynosi " + srednia);
}
}
package emps.obiektowo;
import java.io.File;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;
public class P4b_SredniaWybranych_Interaktywnie {
// W tej wersji użytkownik będzie mógł wybrać plik z dysku i wskazać stanowisko, dla którego ma być wylicozna średnia.
public static void main(String[] args) {
JFileChooser chooser = new JFileChooser(".");
chooser.setDialogTitle("Wybierz plik z danymi pracowników");
chooser.setFileFilter(new FileNameExtensionFilter("Pliki CSV", "csv", "txt"));
int coSieStalo = chooser.showOpenDialog(null);
if(coSieStalo != JFileChooser.APPROVE_OPTION) {
return;
}
File wybranyPlik = chooser.getSelectedFile();
List<Employee> emps = ObslugaCSV.wczytaj(wybranyPlik);
Set<String> jobs = new TreeSet<>();
for (Employee emp : emps) {
jobs.add(emp.getJobTitle());
}
String wybranyJob = (String)JOptionPane.showInputDialog(null,
"Czyją średnią chcesz obliczyć?",
"Wybierz stanowsiko",
JOptionPane.QUESTION_MESSAGE,
null,
jobs.toArray(),
null);
double suma = 0;
int ile = 0;
for (Employee emp : emps) {
if(emp.getJobTitle().equalsIgnoreCase(wybranyJob)) {
suma += emp.getSalary();
ile++;
}
}
double srednia = suma / ile;
JOptionPane.showMessageDialog(null, "Średnia pensja na stanowisku " + wybranyJob + " wynosi " + srednia);
}
}
package emps.obiektowo;
import java.util.List;
public class P5_MinMax_v1 {
// Program znajduje pracownika, który zarabia najwięcej, i pracownika, który zarabia najmniej,
// i wypisuje ich dane (co najmniej: imię, nazwisko, pensję).
// W tej wersji najpierw ustalę jaka jest minimalna i maksymalna pensja, a dopiero potem kto tyle zarabia
// Zaleta: gdyby kilka osób miało jednakową pensję (np. nie tylko King zarabiał 24 tys),
// to wszystkie takie osoby się wypiszą.
// Wada: dane z lisy przeglądamy kilka razy.
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
int minSalary = Integer.MAX_VALUE;
int maxSalary = Integer.MIN_VALUE;
for(Employee emp : emps) {
if(emp.getSalary() > maxSalary) {
maxSalary = emp.getSalary();
}
if(emp.getSalary() < minSalary) {
minSalary = emp.getSalary();
}
}
System.out.println("Maksymalna pensja wynosi " + maxSalary);
System.out.println("Kto tyle zarabia?");
for(Employee emp : emps) {
if(emp.getSalary() == maxSalary) {
System.out.println(emp.getFirstName() + " " + emp.getLastName());
}
}
System.out.println();
System.out.println("Minimalna pensja wynosi " + minSalary);
System.out.println("Kto tyle zarabia?");
for(Employee emp : emps) {
if(emp.getSalary() == minSalary) {
System.out.println(emp.getFirstName() + " " + emp.getLastName());
}
}
}
}
package emps.obiektowo;
import java.util.List;
public class P5_MinMax_v2 {
// Program znajduje pracownika, który zarabia najwięcej, i pracownika, który zarabia najmniej,
// i wypisuje ich dane (co najmniej: imię, nazwisko, pensję).
// W tej wersji od razu zapamiętujemy kto to jest.
// Program jest krótszy, a dane przeglądamy tylko raz.
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
int minSalary = Integer.MAX_VALUE;
int maxSalary = Integer.MIN_VALUE;
String ktoBogaty = "";
String ktoBiedny = "";
for(Employee emp : emps) {
if(emp.getSalary() > maxSalary) {
maxSalary = emp.getSalary();
ktoBogaty = emp.getFirstName() + " " + emp.getLastName();
}
if(emp.getSalary() < minSalary) {
minSalary = emp.getSalary();
ktoBiedny = emp.getFirstName() + " " + emp.getLastName();
}
}
System.out.println("Najbogatszy: " + ktoBogaty + ", zarabia " + maxSalary);
System.out.println("Najbiedniejszy: " + ktoBiedny + ", zarabia " + minSalary);
}
}
package emps.obiektowo;
import java.util.List;
public class P5_MinMax_v3 {
// Program znajduje pracownika, który zarabia najwięcej, i pracownika, który zarabia najmniej,
// i wypisuje ich dane (co najmniej: imię, nazwisko, pensję).
// W tej wersji od razu zapamiętujemy kto to jest.
// Program jest krótszy, a dane przeglądamy tylko raz.
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
Employee bogaty = null;
Employee biedny = null;
for(Employee emp : emps) {
if(bogaty == null || emp.getSalary() > bogaty.getSalary()) {
bogaty = emp;
}
if(biedny == null || emp.getSalary() < biedny.getSalary()) {
biedny = emp;
}
}
System.out.println("Najbogatszy: " + bogaty.getFirstName() + " " + bogaty.getLastName() + ", zarabia " + bogaty.getSalary());
System.out.println("Najbiedniejszy: " + biedny.getFirstName() + " " + biedny.getLastName() + ", zarabia " + biedny.getSalary());
}
}
package emps.obiektowo;
import java.util.List;
public class P5_MinMax_v4 {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
if(emps.isEmpty()) {
System.out.println("Brak danych");
return;
}
Employee bogaty = emps.get(0);
Employee biedny = emps.get(0);
for(Employee emp : emps) {
if(emp.getSalary() > bogaty.getSalary()) {
bogaty = emp;
}
if(emp.getSalary() < biedny.getSalary()) {
biedny = emp;
}
}
System.out.println("Najbogatszy: " + bogaty.getFirstName() + " " + bogaty.getLastName() + ", zarabia " + bogaty.getSalary());
System.out.println("Najbiedniejszy: " + biedny.getFirstName() + " " + biedny.getLastName() + ", zarabia " + biedny.getSalary());
}
}
package emps.obiektowo;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class P6_WypiszUnikalneMiasta {
//TODO Wypisz nazwy miast, w których pracują pracownicy, bez powtórzeń.
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
Set<String> miasta = new TreeSet<>();
for(Employee emp : emps) {
miasta.add(emp.getCity());
}
// System.out.println(miasta);
for (String miasto : miasta) {
System.out.println("* " + miasto);
}
}
}
package emps.obiektowo;
import java.util.ArrayList;
import java.util.List;
public class P6a_WypiszUnikalneMiasta_Lista {
// UWAGA! Ta wersja jest mniej wydajna od wersji z Set.
// do listy dodajemy miasto, jeśli go nie było wcześniej.
// Ale sprawdzenie czy element należy do listy wymaga (wewnętrznie) przejrzenia całej listy w pętli.
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
List<String> miasta = new ArrayList<>();
for(Employee emp : emps) {
if(!miasta.contains(emp.getCity())) {
miasta.add(emp.getCity());
}
}
// System.out.println(miasta);
for (String miasto : miasta) {
System.out.println("* " + miasto);
}
}
}
package emps.obiektowo;
import java.util.List;
// Program wypsiuje pracowników w kolejności posortowanej zwn pensje.
public class P7a_Sortowanie {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
// Listę można posortować, ale:
// 1) albo elementy tej listy muszą implementować interfejs Comparable, czyli "same potrafią się porównać"
// (tak jest dla String, Integer, BigDecimal, LocalDate)
// 2) albo musimy przekazać parametr Comparator, który określa kolejność elementów
// Tutaj sposób 2)
// W tej wersji Comparator zdefiniujemy za pomocą wyrażenia lambda.
// Tutaj używam zwykłego odejmowania int-ów, co jest poprawne gdy oba inty są dodatnie.
emps.sort((emp1, emp2) -> emp1.getSalary() - emp2.getSalary());
for(Employee emp : emps) {
System.out.println(emp);
}
}
}
package emps.obiektowo;
import java.util.List;
// Program wypsiuje pracowników w kolejności posortowanej zwn pensje.
public class P7b_Sortowanie {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
// W tej wersji Comparator zdefiniujemy za pomocą wyrażenia lambda.
// Zalecane jest porównywanie liczb za pomocą gotowych metod compare,
// gdyż zapobiega to problemom z overflowami.
emps.sort((emp1, emp2) -> Integer.compare(emp1.getSalary(), emp2.getSalary()));
for(Employee emp : emps) {
System.out.println(emp);
}
}
}
package emps.obiektowo;
import java.util.Comparator;
import java.util.List;
// Program wypsiuje pracowników w kolejności posortowanej zwn pensje.
public class P7c_Sortowanie {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
// W tej wersji comparator tworzymy za pomocą metody statycznej comparingInt,
// jako parametr podaje się "wskazanie metody" (method reference), za pomocą której jest odczytywana pensja pracownika.
// Nieformalnie:
// sortujemy listę stosując sposób porównywania operaty o porównywanie intów,
// a te inty są pobierane z obiektów Employee za pomocą metody getSalary
// emps.sort(Comparator.comparingInt(Employee::getSalary));
emps.sort(Comparator.comparingInt(Employee::getSalary).reversed());
for(Employee emp : emps) {
System.out.println(emp.getFirstName() + " " + emp.getLastName() + ", zarobki: " + emp.getSalary());
}
}
}
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