2016-11-27 2 views
0

Ich habe eine 3-dimensionale ArrayList und möchte feststellen, ob sie leer ist oder nicht. Es gibt eine Ausnahme namens EmptyCollectionException, die nicht Teil der Java-Standardbibliothek ist und daher nicht erlaubt ist.So ermitteln Sie, ob eine Sammlung leer ist

Gibt es eine Möglichkeit, das mit einer nativen Java-Ausnahme oder -Funktion zu erreichen?

Die 3D-Liste ist wie folgt aufgebaut:

public void makeRandomCardListForLearning (Course courseToBeMadeRandom) { 

    List<List<List<Card>>> course = new ArrayList<List<List<Card>>>(); 

    for(Chapter chptr: courseToBeMadeRandom.getChapterList()) { 
     List<List<Card>> chapter = new ArrayList<List<Card>>(); 
     course.add(chapter); 

     for(Deck dck: chptr.getDeckList()) { 
      List<Card> deck = new LinkedList<Card>(); 
      chapter.add(deck); 

      for(Card crd: dck.getCardList()) { 
       if(dck.isTheCardDueToday(crd.getLastDate())) { 
        deck.add(crd); 
       } 
      } 
      Collections.shuffle(deck); 
     } 
    } 
} 

Wie gehe ich durch natürlich Kapitel und Deck ich eine Liste für jeden. Es gibt nur einen Platz, viele Kapitel, viele Decks und natürlich viele Karten, die unter Deck doublyLinkedList gespeichert werden, wenn sie die Voraussetzung erfüllen. Wenn keine Karte die Bedingung besteht, habe ich eine 3D-Liste, die existiert, aber keine Karten hat. Und ich möchte feststellen, dass, wenn keine Karte in der Liste vorhanden ist, der Benutzer eine Fehlermeldung erhält.

Tatsächlich brauche ich nur die Karten. Aber ich muss auch wissen, in welchem ​​Deck sich gerade jede Karte befindet. Wenn ich nur eine Liste aufstelle und alle Kapitel und Decks durchführe und Karten in diese Liste aufnehme, habe ich keine Ahnung, in welchem ​​Kapitel und in welchem ​​Deck sich jede Karte befindet. Dies kann durch Hinzufügen von zwei Attributen zur Kartenklasse gelöst werden. Aber das war ein Fehler, als wir das System entwarfen und sie jetzt hinzufügen, kostet viel Veränderung in anderen Teilen des Programms. Jeder Index in der Kursliste repräsentiert die Kapitelnummer und jeder Index in der Kapitelliste repräsentiert die Decknummer. Ich habe das Problem auf diese Weise gelöst.

+0

können Sie einen Teil Ihres Codes anzeigen? –

+0

ist 'arrayList.isEmpty()' nicht ausreichend? – SMA

+0

Wie ist 'isEmpty()' Methode? –

Antwort

1

Dies sollte es tun erreichen wollen:

public static boolean isEmpty(List<List<List<Card>>> list3d) { 
    return list3d.stream().flatMap(llc -> llc.stream()).flatMap(lc -> lc.stream()).count() == 0; 
} 

Es berücksichtigt, dass die äußeren Listen leere innere Listen enthalten können. Es gilt die gesamte 3D-Liste als leer, wenn keine Karten darin enthalten sind.

+0

Kompakt, präzise, ​​auf den Punkt. Genau das, was ich wollte! Vielen Dank :) – Infinity

1

Sie können etwas tun wie dieses

  List<List<List<Card>>> course = new ArrayList<List<List<Card>>>(); 
        // some possible codes 
     boolean check = course.isEmpty() 
        // other possible codes 
       if (check) { 
      // do something 
          } 

oder jede Arraylist Sie prüfen möchten oder irgendeiner Weise Sie Ihr Ziel

+0

Ich möchte es am Ende nicht am Anfang überprüfen. In der Tat möchte ich wissen, ob eine Karte in einer der Listen existiert oder ob die Liste nur natürlich gemacht wird, Kapitel, Decks und keine Karten unter irgendeinem Deck. Denn irgendwann muss ich mit Karten arbeiten. – Infinity

+0

Ich habe es in einem If platziert, um einen booleschen Wert zu zeigen. Und es ist nur ein Beispiel dafür, wie es funktioniert.Sie ​​können Ihren Code schreiben und ihn verwenden, wie Sie wollen.Lassen Sie mich bearbeiten –

+0

@Infinity Ich habe meinen Beitrag bearbeitet. –

Verwandte Themen