Commit de62d82b by Patryk Czarnik

Employee - wersja z rekordem

parent 5883733a
package emps.v4_rekordy;
import java.time.LocalDate;
public record Employee(int employeeId, String firstName, String lastName, String jobTitle, int salary, LocalDate hireDate,
String departmentName, String address, String postalCode, String city, String country) {
// Rekord to jest "taka klasa", dla której automatycznie tworzone są:
// - deklaracje podanych pól, które wszystkie są "private final"
// - konstruktor z wszystkimi parametrami
// - gettery do wszystkich pól, ale uwaga, nazwą metody jest po prostu "salary()", a nie "getSalary()"
// - toString, equals i hashCode w sposób standardowy dla klas typu "value object"
// Do rekordu można dodawać własne metody. Rekord może implementować interfejsy.
public String danePracownika() {
return String.format("%s %s (%s) zarabia %d", firstName, lastName, jobTitle, salary);
}
}
package emps.v4_rekordy;
import java.util.List;
public class F2_WypiszBogatych {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytajDane();
System.out.println("BOGACI:");
emps.stream()
.filter(emp -> emp.salary() >= 10_000)
.forEach(emp -> System.out.printf("Pracownik nr %d, %s %s (%s) zarabia %d\n",
emp.employeeId(), emp.firstName(), emp.lastName(), emp.jobTitle(), emp.salary()));
System.out.println("\nBIEDNI:");
emps.stream()
.filter(emp -> emp.salary() < 5000)
.map(Employee::danePracownika)
//.map(String::toUpperCase)
.forEach(System.out::println);
}
}
package emps.v4_rekordy;
import java.util.List;
import java.util.OptionalDouble;
import javax.swing.JOptionPane;
public class F4_SredniaJedenJob {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytajDane();
String szukanyJob = JOptionPane.showInputDialog("Podaj nazwę stanowiska", "Programmer");
OptionalDouble srednia = emps.stream()
.filter(emp -> emp.jobTitle().equals(szukanyJob))
.mapToInt(Employee::salary)
.average();
if(srednia.isPresent()) {
JOptionPane.showMessageDialog(null, "Średnia pensja: " + srednia.getAsDouble());
} else {
JOptionPane.showMessageDialog(null, "Nikt nie pracuje na stanowisku " + szukanyJob,
"Brak dancyh", JOptionPane.WARNING_MESSAGE);
}
}
}
package emps.v4_rekordy;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class GrupowanieMap {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytajDane();
Map<String, Integer> sumy = new TreeMap<>();
Map<String, Integer> ilosci = new TreeMap<>();
for(Employee emp : emps) {
int suma = sumy.getOrDefault(emp.jobTitle(), 0);
sumy.put(emp.jobTitle(), suma + emp.salary());
int ilosc = ilosci.getOrDefault(emp.jobTitle(), 0);
ilosci.put(emp.jobTitle(), ilosc + 1);
}
for(String job : sumy.keySet()) {
int suma = sumy.get(job);
int ilosc = ilosci.get(job);
double srednia = suma / ilosc;
System.out.printf("| %-32s | %2d | %8.2f |\n", job, ilosc, srednia);
}
}
}
package emps.v4_rekordy;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class GrupowanieMerge {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytajDane();
Map<String, Integer> sumy = new TreeMap<>();
Map<String, Integer> ilosci = new TreeMap<>();
for(Employee emp : emps) {
sumy.merge(emp.jobTitle(), emp.salary(), Integer::sum);
ilosci.merge(emp.jobTitle(), 1, Integer::sum);
}
for(String job : sumy.keySet()) {
int suma = sumy.get(job);
int ilosc = ilosci.get(job);
double srednia = suma / ilosc;
System.out.printf("| %-32s | %2d | %8.2f |\n", job, ilosc, srednia);
}
}
}
package emps.v4_rekordy;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Grupowanie_f2 {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytajDane();
// W tej wersji do groupingBy dodajemy parametr (kolejny collector) mówiący, co zrobić z każdą grupą.
// Dla każdej grupy liczymy średnią pensję.
Map<String, Double> grupy = emps.stream().collect(
Collectors.groupingBy(Employee::jobTitle,
Collectors.averagingInt(Employee::salary)));
grupy.forEach((job, srednia) -> {
System.out.printf("%32s → %8.2f%n", job, srednia);
});
}
}
package emps.v4_rekordy;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class ObslugaCSV {
/** Wczytuje dane z domyślnej lokalizacji pliku. */
public static List<Employee> wczytajDane() {
return wczytajDane("pliki/emps.csv");
}
public static List<Employee> wczytajDane(String sciezka) {
List<Employee> lista = new ArrayList<>();
try(BufferedReader in = new BufferedReader(new FileReader(sciezka))) {
String linia = in.readLine();
// pierwszą linię ignorujemy - tam są nazwy kolumn
while((linia = in.readLine()) != null) {
String[] t = linia.split(";", -1);
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]);
lista.add(emp);
}
} catch(IOException e) {
// W przypadku błędu wypiszemy info, ale nie przerywamy programu
e.printStackTrace();
}
return lista;
}
}
package emps.v4_rekordy;
import java.util.List;
public class P0_TestOdczytu {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytajDane("pliki/emps.csv");
System.out.println("Odczytano " + emps.size() + " rekordów:");
for(Employee emp : emps) {
System.out.println(emp);
}
}
}
package emps.v4_rekordy;
import java.util.List;
public class P2_WypiszBogatych {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytajDane();
int ile = 0;
for(Employee emp : emps) {
if(emp.salary() >= 10_000) {
System.out.printf("%s %s (%s) zarabia %d\n",
emp.firstName(), emp.lastName(), emp.jobTitle(), emp.salary());
ile++;
}
}
System.out.println("Liczba bogatych osób: " + ile);
}
}
package emps.v4_rekordy;
import java.util.List;
public class P2_WypiszBogatych_Metoda {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytajDane();
int ile = 0;
for(Employee emp : emps) {
if(emp.salary() >= 10_000) {
System.out.println(emp.danePracownika());
ile++;
}
}
System.out.println("Liczba bogatych osób: " + ile);
}
}
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