Commit 6be82c5a by Patryk Czarnik

czytanie strumieniowe

parent b17a5438
......@@ -6,7 +6,7 @@ import java.util.Optional;
import java.util.OptionalDouble;
import java.util.Scanner;
public class F8_DaneOpcjonalne {
public class DaneOpcjonalne {
public static void main(String[] args) {
// Użytkownik podaje nazwę miasta, a program filtruje dane wczytane z pliku
......
package emps;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class F8_Partycje {
public static void main(String[] args) {
List<Employee> emps = ObslugaCSV.wczytaj("emps.csv");
// Podział rekordów na dwie części i zapisanie w słowniku,
// w którym kluczem są wartości true/false
Map<Boolean, List<Employee>> grupy = emps.stream()
.collect(Collectors.partitioningBy(emp -> emp.getSalary() >= 10_000));
System.out.println("Bogaci:");
grupy.get(true).forEach(emp -> {
System.out.printf(" * %s %s (%s), pensja: %s\n", emp.getFirstName(), emp.getLastName(), emp.getJobTitle(), emp.getSalary());
});
System.out.println("\nBiedni:");
grupy.get(false).forEach(emp -> {
System.out.printf(" * %s %s (%s), pensja: %s\n", emp.getFirstName(), emp.getLastName(), emp.getJobTitle(), emp.getSalary());
});
}
}
......@@ -2,13 +2,25 @@ package emps;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Stream;
public class ObslugaCSV {
private static Employee parsujLinie(String linia) {
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]);
return emp;
}
public static List<Employee> wczytaj() {
// używa domyślnego pliku
return wczytaj("emps.csv");
......@@ -25,9 +37,7 @@ public class ObslugaCSV {
while(scanner.hasNextLine()) {
String linia = scanner.nextLine();
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]);
Employee emp = parsujLinie(linia);
emps.add(emp);
}
} catch (FileNotFoundException e) {
......@@ -37,6 +47,34 @@ public class ObslugaCSV {
return emps;
}
// public Stream<Employee> wczytajStrumieniowo(File plik) {
// return wczytaj(plik).stream();
// }
public static Stream<Employee> wczytajStrumieniowo(Path plik) {
try {
return Files.lines(plik)
.skip(1)
.map(ObslugaCSV::parsujLinie);
} catch (IOException e) {
e.printStackTrace();
return Stream.empty();
}
}
public static Stream<Employee> wczytajStrumieniowo(File plik) {
return wczytajStrumieniowo(plik.toPath());
}
public static Stream<Employee> wczytajStrumieniowo(String sciezka) {
return wczytajStrumieniowo(Path.of(sciezka));
}
public static Stream<Employee> wczytajStrumieniowo() {
return wczytajStrumieniowo("emps.csv");
}
public static void zapisz(List<Employee> lista, File plik) {
try(PrintWriter out = new PrintWriter(plik)) {
out.println(
......@@ -59,4 +97,19 @@ public class ObslugaCSV {
public static void zapisz(List<Employee> lista) {
zapisz(lista, "emps.csv");
}
public static void zapiszStrumieniowo(Stream<Employee> stream, File plik) {
try(PrintWriter out = new PrintWriter(plik)) {
out.println(
"employee_id;first_name;last_name;job_title;salary;hire_date;department_name;address;postal_code;city;country");
stream.forEachOrdered(emp -> {
out.printf("%d;%s;%s;%s;%d;%s;%s;%s;%s;%s;%s\n", emp.getEmployeeId(), emp.getFirstName(),
emp.getLastName(), emp.getJobTitle(), emp.getSalary(), emp.getHireDate(),
emp.getDepartmentName(), emp.getAddress(), emp.getPostalCode(), emp.getCity(),
emp.getCountry());
});
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
package emps;
import java.util.Comparator;
import java.util.stream.Stream;
public class S2_Filtrowanie {
public static void main(String[] args) {
try(Stream<Employee> empStream = ObslugaCSV.wczytajStrumieniowo()) {
empStream
.filter(emp -> emp.getSalary() <= 5000)
.sorted(Comparator.comparing(Employee::getSalary))
.map(emp -> emp.getFirstName() + " " + emp.getLastName() + " z pensją " + emp.getSalary())
.map(String::toUpperCase)
.forEach(System.out::println);
}
}
}
package emps;
import java.util.OptionalDouble;
import javax.swing.JOptionPane;
public class S4_SredniaJedenJob {
public static void main(String[] args) {
String szukanyJob = JOptionPane.showInputDialog("Podaj szukany job", "Programmer");
OptionalDouble srednia2 = ObslugaCSV.wczytajStrumieniowo()
.filter(emp -> emp.getJobTitle().equalsIgnoreCase(szukanyJob))
.mapToInt(Employee::getSalary)
.average();
if(srednia2.isPresent()) {
JOptionPane.showMessageDialog(null, String.format(
"Średnia pensja na stanowisku %s wynosi %.2f",
szukanyJob, srednia2.getAsDouble()));
} else {
JOptionPane.showMessageDialog(null, String.format("Nikt nie pracuje na stanowisku %s.", szukanyJob),
"Brak danych", JOptionPane.WARNING_MESSAGE);
}
}
}
package emps;
import java.util.IntSummaryStatistics;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;
public class S_Grupowanie9 {
public static void main(String[] args) {
Map<String, IntSummaryStatistics> grupy = ObslugaCSV.wczytajStrumieniowo()
.collect(Collectors.groupingBy(
Employee::getJobTitle,
TreeMap::new,
Collectors.summarizingInt(Employee::getSalary)));
grupy.forEach((job, stats) -> {
// System.out.printf("%-32s → %s%n", job, stats);
System.out.printf("| %-32s | %2d | %5d | %8.2f | %5d |%n",
job, stats.getCount(), stats.getMin(), stats.getAverage(), stats.getMax());
});
}
}
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