Commit b71f2cfc by Patryk Czarnik

pzykłady min/max

parent 9750c491
...@@ -10,8 +10,8 @@ public class P4_SredniaProgramistow { ...@@ -10,8 +10,8 @@ public class P4_SredniaProgramistow {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv"); List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
double suma = 0; double suma = 0;
int ile = 0; int ile = 0;
for (Employee emp : emps) { for(Employee emp : emps) {
if(emp.getJobTitle().equals("Programmer")) { if("Programmer".equals(emp.getJobTitle())) {
suma += emp.getSalary(); suma += emp.getSalary();
ile++; ile++;
} }
......
package emps.strumieniowo;
import java.util.List;
public class P5_MinMax_v1 {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
int min = emps.stream()
.mapToInt(Employee::getSalary)
.min()
.orElse(0);
int max = emps.stream()
.mapToInt(Employee::getSalary)
.max()
.orElse(0);
System.out.println("Najmniejsza pensja: " + min);
System.out.println("Największa pensja: " + max);
}
}
package emps.strumieniowo;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
public class P5_MinMax_v2 {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
Optional<Employee> min = emps.stream().min(Comparator.comparingInt(Employee::getSalary));
Optional<Employee> max = emps.stream().max(Comparator.comparingInt(Employee::getSalary));
System.out.println(min);
System.out.println(max);
System.out.println();
if(min.isPresent()) {
Employee minEmp = min.get();
System.out.printf("Najmniej zarabia %s %s (%s): %d%n",
minEmp.getFirstName(), minEmp.getLastName(), minEmp.getJobTitle(), minEmp.getSalary());
}
if(max.isPresent()) {
Employee maxEmp = max.get();
System.out.printf("Najwięcej zarabia %s %s (%s): %d%n",
maxEmp.getFirstName(), maxEmp.getLastName(), maxEmp.getJobTitle(), maxEmp.getSalary());
}
}
}
package emps.strumieniowo;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.swing.JOptionPane;
public class P5_MinMax_v3 {
// W tej wersji użytkownik podaje nazwę miasta, a program znajduje pracownika, który zarabia nawięcej w tym mieście.
public static void main(String[] args) {
String city = JOptionPane.showInputDialog("Podaj nawę miasta");
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
Optional<Employee> max = emps.stream()
.filter(emp -> Objects.equals(emp.getCity(), city))
.max(Comparator.comparingInt(Employee::getSalary));
if(max.isPresent()) {
JOptionPane.showMessageDialog(null, "W mieście " + city + " najbogatszy jest "
+ max.get().getFirstName() + " " + max.get().getLastName() + " z pensją " + max.get().getSalary());
} else {
JOptionPane.showMessageDialog(null, "Nikt nie pracuje w mieście " + city);
}
}
}
package emps.strumieniowo;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import javax.swing.JOptionPane;
public class P5_MinMax_v4 {
// W tej wersji użytkownik podaje nazwę miasta, a program znajduje pracownika, który zarabia nawięcej w tym mieście.
public static void main(String[] args) {
String city = JOptionPane.showInputDialog("Podaj nawę miasta");
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
// Zamiast po uzyskaniu obiektu Optional za pomocą ifa sprawdzać czy wynik został uzyskany,
// możemy "w locie" zmapować wynik typu Employee na String
// i w jednym wyrażeniu uzyskać Stringa opisującego sytuację gdy dane są, lub gdy danych nie ma.
// map na obiekcie Optional działa tak:
// - jeśli w pudełku coś jest, to zmapuj zawartość pudełka (np. z Optional<Employee> powstaje Optional<String>)
// - jeśli pudełko jest puste, to pozostaje puste
String tekst = emps.stream()
.filter(emp -> Objects.equals(emp.getCity(), city))
.max(Comparator.comparingInt(Employee::getSalary))
.map(emp -> "W mieście " + city + " najbogatszy jest " + emp.getFirstName() + " " + emp.getLastName() + " z pensją " + emp.getSalary())
.orElse("Nikt nie pracuje w mieście " + city);
JOptionPane.showMessageDialog(null, tekst);
}
// Zarówno strumienie, jak i obiekty Optional, to są "monady".
// Tę teorie znają programiści języka Haskell :-)
}
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