Collection sortieren/ filtern

NeX

Mitglied
Hallo!
ich möchte eine Klasse schreiben, die Mitarbeiter mit gleichen Arbeitszeiten erst sortiert (mit dem übergebenen Comparator) und dann filtert um am Ende eine Liste zurückzugeben, die nur noch Mitarbeiter enthält deren Arbeitszeiten sich nicht überschneiden. Das ist soweit mein Ansatz:

Java:
public class TimeSelector {
   
    public static List <Employee> selectDiffTimes(Comparator<Employee> comp,
                                                        Collection<Employee> col){
       
       
        List <Employee> list = new ArrayList <Employee>();
        List <Employee> choosenEmployees = new ArrayList <Employee>();
       
       
       
        list.addAll(col);
        list.sort(comp);
       

        if(list.size() == 1){
            return list;
        }
      
     
        for(Employee a : list){
           
 
            for(int b = 0; b < list.size(); b++){
               
                int x= 0;
                
               //außer sich selbst
                if(b != list.indexOf(a) && x== 0){
                   
                    if(!list.get(b).getEnd().isAfter(a.getStart()) ||
                       !list.get(b).getStart().isBefore(a.getEnd())){
                       
                        if(listSorted.contains(a)){
                           
                            x++;
                            continue;
                           
                            } else choosenEmployees.add(a);
                       
                     }else continue;

                }
            }
        }
   
       
    listSorted.sort(comp);
    return choosenEmployees;
       

  }
}

Leider funktioniert er nicht, wie er soll, da auch Mitarbeiter ausgegeben werden, die zur selben Zeit arbeiten. Ich bin mir aber ziemlich sicher, dass die Bedingungen in der if stimmen sollten. Vertue ich mich da? Oder liegt der Fehler an einer anderen Stelle?

Wäre super dankbar für Tipps!
 
X

Xyz1

Gast
Du kannst da glaube ich nicht gefräßig rangehen, ich bin mir aber auch nicht ganz sicher.
 
K

kneitzel

Gast
Also der Code ist schwer lesbar. Variablen einfach nach dem Alphabet zu benennen ist extrem ungeschickt und dann ist das Konstrukt extrem kompliziert aufgebaut!
a) So viele Verschachtelungen sind generell unleserlich. Da hilft es sehr, die Logik in weitere Funktionen auszulagern. Dies sorgt für einen lesbaren Code und ermöglichst das Testen von kleineren Einheiten.
b) Die Variable x nutzt Du nur, um aus der for Schleife auszusteigen, oder? Dann wäre doch evtl. die Variable x ersatzlos zu streichen und das continue durch break zu ersetzen? (Oder habe ich einen Teil der Logik auf die Schnelle falsch erfasst?) Wobei dies ggf. durch das Refactoring bezüglich Punkt a) ehh entfällt, weil man dann die ganze Unterfunktion einfach durch ein return verlassen kann.
c) Wieso packst Du erst alles in list? Kannst Du nicht direkt die übergebene Collection col nutzen?
d) Mal nutzt Du choosenEmployees und mal listSorted. Was ist listSorted? Die Variable sehe ich im lokalen Kontext nicht.
e) Deine if Bedingung verstehe ich nicht ganz. Da würde ich auch die Bedingung noch einmal genauer prüfen. Aber wenn Du das in einer Funktion auslagerst und dann mit Unit-Tests alle Fälle, die zu unterscheiden sind, prüfst, dann hast Du ja eine super Kontrolle, ob die Logik wirklich korrekt ist.
f) Debugger sind generell sehr sinnvoll um genau zu sehen, was genau passiert um das dann zu kontrollieren.
 

Meniskusschaden

Top Contributor
Noch ein Tipp zur if-Bedingung, die mir auch seltsam vorkommt: Bei solchen Überschneidungsabfragen ist es häufig einfacher, nicht die Überschneidungsbedingung zu formulieren, sondern die Bedingung, bei der es keine Überschneidung gibt. Die muß man dann nur noch verneinen. Konkret: Du willst prüfen, ob sich Arbeitszeiten überschneiden. Also überlegst du dir die verschiedenen Bedingungen unter denen sie sich garantiert nicht überschneiden, verknüpfst diese mit && und negierst den gesamten Ausdruck mit !.
 
X

Xyz1

Gast
keine Überschneidungen: start1 < start2 && ende1 < ende2 || start1 > start2 && ende1 > ende2
Überschneidungen: (start1 > start2 || ende1 > ende2) && (start1 < start2 || ende1 < ende2)
ganz korrekt ist das nicht, weil ende oder start auch in der Arbeitszeit des anderen liegen können

Nur jetzt jeden mit jeden vergleichen, halte ich für falsch, da gibt's Schlaueres ;)

Edit: bitte auch beachten, Negation von < ist nicht > :D
 
X

Xyz1

Gast
Da habe ich Quatsch geschrieben. Statt && muß man mit || verknüpfen. Es gibt also keine Überschneidung wenn ende1 < start2 || ende2 < start1ist. Eine Überschneidung liegt also bei !(ende1 < start2 || ende2 < start1) vor.

Genau,
ende1 < start2 bedeutet: Die Arbeitszeit liegt davor von 1,
ende2 < start1 bedeutet: Die Arbeitszeit liegt danach von 1,

das ist so wie hier im Forum, der eine schläft halt mal und der andere ist wach,
und 48 Stunden möchte niemand wach sein, deswegen schläft man ab und an/zu
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Welche Collection kann sich selber sortieren? Java Basics - Anfänger-Themen 8
I Collection sortieren, ":" höchste "Priorität& Java Basics - Anfänger-Themen 4
Encera Garbage Collection Java Basics - Anfänger-Themen 9
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
berserkerdq2 Warum soll ich shuffle nutzen, um bei Rückgabewert Collection eine Liste zurückzugeben? Java Basics - Anfänger-Themen 3
M Collection.sort sortiert nicht Java Basics - Anfänger-Themen 7
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
E Interface List nicht als Collection an erkannt. Java Basics - Anfänger-Themen 14
F Collection Aufgabe mit LinkedList Java Basics - Anfänger-Themen 3
N Collections Werte aus .txt in einer Collection speichern Java Basics - Anfänger-Themen 11
M Collection Aufgabe Java Basics - Anfänger-Themen 22
Arif Collections Unkonstruiertes Objekt einer Collection hinzufügen Java Basics - Anfänger-Themen 2
W Collection-Problem Java Basics - Anfänger-Themen 35
P Klassen In einer Autoklasse das Objekt Auto mittels Collection Speichern Java Basics - Anfänger-Themen 4
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
J Objekt in Collection speichern Java Basics - Anfänger-Themen 4
A Interface in Collection (Liste) angeben Java Basics - Anfänger-Themen 2
J Collection Objekt Java Basics - Anfänger-Themen 3
T Collections Zusammengehörende Strings in einer Collection Java Basics - Anfänger-Themen 2
S Frage zu Collection-Generics in Subklassen Java Basics - Anfänger-Themen 6
B Collections Collection soll nur einen bestimmten Datentyp aufnehmen Java Basics - Anfänger-Themen 12
B addAll(Collection<? extends E> c) Java Basics - Anfänger-Themen 9
K Collections Collection für 12 mio Strings Java Basics - Anfänger-Themen 7
Y Collection der eigenen Klasse Java Basics - Anfänger-Themen 10
S Collections Welche Collection ist am geeignetsten? Java Basics - Anfänger-Themen 3
R Passende Collection gesucht Java Basics - Anfänger-Themen 11
G Collections Wahl der richtigen Collection Java Basics - Anfänger-Themen 11
O Frage zu Verständnis von Collection Java Basics - Anfänger-Themen 4
D Scala Iterable zu Java Collection konvertieren Java Basics - Anfänger-Themen 3
D Frage zu Collection und deren Anwendung Java Basics - Anfänger-Themen 2
J Collection soll übergeben werden... Java Basics - Anfänger-Themen 7
C Vector - obsolete collection Java Basics - Anfänger-Themen 1
B Iterator und Collection Java Basics - Anfänger-Themen 11
G Java Collection Frameworks Java Basics - Anfänger-Themen 5
D Collection Konvertieren Java Basics - Anfänger-Themen 7
K Datentypen Über Collection iterieren bringt fehler Java Basics - Anfänger-Themen 8
K OOP Aus Collection Objekte bestimmter Subklassen entfernen Java Basics - Anfänger-Themen 7
S Welche Collection? Java Basics - Anfänger-Themen 5
S Collection rückwärts durchsuchen Java Basics - Anfänger-Themen 4
W Wie kann ich auf Object meiner Collection zugreifen Java Basics - Anfänger-Themen 7
J Collection Vector Java Basics - Anfänger-Themen 8
B Collection während Iteration verändern Java Basics - Anfänger-Themen 7
T Collection in collection Java Basics - Anfänger-Themen 6
T Collection von Objekten verschiedener Klassen Java Basics - Anfänger-Themen 4
J Collection ArrayList und mit erweitertem for iterieren Java Basics - Anfänger-Themen 7
J Probleme mit Collection ArrayList Java Basics - Anfänger-Themen 2
C Collection vs. LinkedList, Abstrakt vs. Konkret Java Basics - Anfänger-Themen 9
G Collection<BufImg> in Datei speichern Java Basics - Anfänger-Themen 8
A Collection auslesen ohne Objekttyp zu kennen? Java Basics - Anfänger-Themen 11
G Collection<Strings> - Liste von Strings verwalten Java Basics - Anfänger-Themen 9
A Struts: Über Collection iterieren mir Taglibs? Java Basics - Anfänger-Themen 13
S Collection<Typ> sort Java Basics - Anfänger-Themen 4
0x7F800000 elemente aus einer Collection korrekt löschen Java Basics - Anfänger-Themen 8
T Frage zu Vererbung beim Collection-Framework Java Basics - Anfänger-Themen 4
I Frage zu Collection und List Interfaces Java Basics - Anfänger-Themen 2
M Object [][] ist nicht vom Typ Collection? Java Basics - Anfänger-Themen 3
S Collection wie LinkedHashMap Java Basics - Anfänger-Themen 7
J LinkedList, Collection, ArrayList, List. was denn bitte? Java Basics - Anfänger-Themen 6
S Collection Sort Java Basics - Anfänger-Themen 15
A Welche Collection? Java Basics - Anfänger-Themen 13
C Collection in Verbindung mit String.split speicherlastig Java Basics - Anfänger-Themen 20
S Collection in einer Collection Java Basics - Anfänger-Themen 5
A Welche Collection soll ich nehmen? Java Basics - Anfänger-Themen 4
E welche Datenstruktur (Collection) Java Basics - Anfänger-Themen 4
K Collection und Iterator Java Basics - Anfänger-Themen 7
I Bestimmte Variablen in Collection Classes Java Basics - Anfänger-Themen 2
M Source Code von Collection Framework, etc. Java Basics - Anfänger-Themen 3
vogella Cast from Collection.toArray to String[] Java Basics - Anfänger-Themen 2
K Verständnisfrage Collection, ArrayList und Referenzen Java Basics - Anfänger-Themen 4
S Mit Collection<int[]> umgehen Java Basics - Anfänger-Themen 2
S welche collection ? String und object Java Basics - Anfänger-Themen 5
M gibt es eine collection mit definierter maximaler größe Java Basics - Anfänger-Themen 4
G Collection Framework Java Basics - Anfänger-Themen 8
V Mehrdimensionale Collection? Java Basics - Anfänger-Themen 4
U JSTL: Collection auslesen mit forEach Java Basics - Anfänger-Themen 1
A Interface Collection implementieren? Java Basics - Anfänger-Themen 4
P Äquivalent zu Visual Basic Collection Java Basics - Anfänger-Themen 6
G Collection, aber welche? Java Basics - Anfänger-Themen 6
A Collection<String> Java Basics - Anfänger-Themen 4
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
E Strings in Collection Java Basics - Anfänger-Themen 6
R welche Collection nehmen? Java Basics - Anfänger-Themen 4
P Collection Vector speichern mittels Serialisierung? Java Basics - Anfänger-Themen 2
megachucky Collection Vector: ausgabe klappt nicht richtig Java Basics - Anfänger-Themen 9
T Welche Collection nehmen? HashMap? Java Basics - Anfänger-Themen 4
L-ectron-X Speicher freigeben - Garbage Collection Java Basics - Anfänger-Themen 6
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J HashSet mit Comparable sortieren Java Basics - Anfänger-Themen 13
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
O Sortieren mit Insertion Sort Java Basics - Anfänger-Themen 3
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben