===== Serializacja ===== * **Serializacja** - zamiana obiektu na ciąg bajtów (zapis, przesył sieciowy). * Klasa musi implementować marker ''java.io.Serializable''. * Pola ''transient'' są pomijane podczas serializacji. * ''serialVersionUID'' - wersja klasy, zalecane do deklarowania. import java.io.*; class Student implements Serializable { private static final long serialVersionUID = 1L; String name; int grade; transient String password; // nie będzie serializowane Student(String name, int grade) { this.name = name; this.grade = grade; } } // Zapis (serializacja) try (ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream("student.ser"))) { oos.writeObject(new Student("Ania", 5)); } // Odczyt (deserializacja) try (ObjectInputStream ois = new ObjectInputStream( new FileInputStream("student.ser"))) { Student s = (Student) ois.readObject(); System.out.println(s.name + " - " + s.grade); } ===== Przykłady praktyczne ===== Przetwarzanie listy studentów: record Student(String name, int grade, String group) {} List students = List.of( new Student("Ania", 5, "A"), new Student("Bartosz", 3, "B"), new Student("Ola", 4, "A"), new Student("Adam", 5, "B"), new Student("Beata", 3, "A") ); // Najlepsi studenci z grupy A, posortowani alfabetycznie List topA = students.stream() .filter(s -> s.group().equals("A") && s.grade() >= 4) .sorted(Comparator.comparing(Student::name)) .map(Student::name) .collect(Collectors.toList()); System.out.println(topA); // [Ania, Ola] // Średnia ocena per grupa Map avgByGroup = students.stream() .collect(Collectors.groupingBy(Student::group, Collectors.averagingInt(Student::grade))); System.out.println(avgByGroup); // {A=4.0, B=4.0} // Zapis do pliku Path out = Path.of("students.txt"); Files.write(out, students.stream() .map(s -> s.name() + "," + s.grade() + "," + s.group()) .collect(Collectors.toList()));