import javax.crypto.spec.PSource; import java.util.*; import java.util.stream.Collectors; public class Verwaltung { LinkedList mediensListe = new LinkedList<>(); LinkedList benutzerListe = new LinkedList<>(); Creator obj = new Creator(); void addFunktion(Medien medien) { mediensListe.add(medien); } void addBenutzer(Benutzer benutzer) { benutzerListe.add(benutzer); } static int mrgen() { Random m = new Random(); int[] zahl = new int[7]; int number; for (int i = 0; i < 7; ++i) { number = m.nextInt(10); zahl[i] = number; } number = Arrays.stream(zahl).reduce(0, (acc, digit) -> { return acc * 10 + digit; }); return number; } public int generiereEindeutigeKundennummer() { final int[] genkundennummer = new int[1]; // Verwendung eines Arrays, um den Wert zu ändern do { genkundennummer[0] = mrgen(); // Eine neue Kundennummer generieren } while (benutzerListe.stream().anyMatch(benutzer -> benutzer.getKundennummer() == genkundennummer[0])); return genkundennummer[0]; // Rückgabe der Kundennummer } // Verbesserte Version der durchsuchenMedien-Methode public static List durchsuchenMedien(LinkedList medienListe, String suchbegriff) { String suchbegriffKlein = suchbegriff.toLowerCase(); // Der Suchbegriff in Kleinbuchstaben für einfache Vergleiche return medienListe.stream() .filter(medien -> { // Sucht nach dem Mediumstyp (Art des Mediums) und dem Namen des Werkes boolean gefunden = false; // Überprüfe, ob die Art des Mediums im Suchbegriff enthalten ist if (medien instanceof Medien.Book) { gefunden |= "buch".contains(suchbegriffKlein); } else if (medien instanceof Medien.Dvds) { gefunden |= "dvd".contains(suchbegriffKlein); } else if (medien instanceof Medien.Cds) { gefunden |= "cd".contains(suchbegriffKlein); } else if (medien instanceof Medien.Brettspiel) { gefunden |= "sb".contains(suchbegriffKlein); // "sb" für Brettspiel } else if (medien instanceof Medien.Videospiel) { gefunden |= "videospiel".contains(suchbegriffKlein); } // Zusätzlich wird nach dem Namen des Werkes gesucht gefunden |= medien.getName().toLowerCase().contains(suchbegriffKlein); return gefunden; // Wenn das Medium den Suchbegriff in der Art oder im Namen enthält, bleibt es in der Liste }) .collect(Collectors.toList()); // Rückgabe der gefilterten Liste } } class Creator { static Benutzer factoryBenutzer(String name, String nachname, int kundennummer, Date date) { if (Benutzer.getJahr(new Benutzer(name, nachname, kundennummer, date)) > 18) { return new Benutzer.Erwachsen(name, nachname, kundennummer, date); } else { return new Benutzer.Kinder(name, nachname, kundennummer, date); } } public static Medien factoryMedien(String name, String regisseur, int id, String art, int erscheinungsjahr) { switch (art.toLowerCase()) { case "buch": return new Medien.Book(name, regisseur, id, erscheinungsjahr); // Autor für Bücher case "dvd": return new Medien.Dvds(name, regisseur, id); // Regisseur für DVDs case "cd": return new Medien.Cds(name, id); // CDs benötigen keinen Autor case "sb": // Brettspiel return new Medien.Brettspiel(name, id); // Brettspiele benötigen keinen Autor case "videospiel": return new Medien.Videospiel(name, regisseur, id); // Entwickler für Videospiele default: throw new IllegalArgumentException("Unbekannter Medientyp: " + art); } } }