2016-11-27 5 views
0

У меня есть трехмерный массив ArrayList, и я хочу определить, пуст он или нет. Существует исключение EmptyCollectionException, которое не является частью стандартной библиотеки java, и поэтому мне не разрешено использовать его.Как определить, что коллекция пуста

Есть ли способ сделать это с использованием собственного исключения или функции java?

Список 3D построен следующим образом:

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); 
     } 
    } 
} 

Как я пройти курс, главы и палубу создать список для каждого из них. Существует только один курс, много глав, много колод и, конечно, много карт, которые сохраняются под палубой doublelyLinkedList, если они проходят предварительное условие. Если никакая карта не проходит условие, у меня есть список 3D, который существует, но не имеет карт. И я хочу определить, что если в списке нет карты, пользователь получает сообщение об ошибке.

На самом деле мне нужны только карточки. Но мне также нужно знать, в какой колоде каждая карта находится на данный момент. Если я просто составляю список и просматриваю все главы и палубы и кладу карты в этот список на основе условия, то у меня нет понятия, в какой главе и колоде каждая карта находится. Это можно решить, добавив два атрибута в класс карты. Но это было ошибкой, поскольку мы разработали систему, и теперь их добавление требует больших изменений в других частях программы. Каждый индекс в списке курсов представляет номер главы, и каждый индекс в списке глав представляет номер колоды. Я решил проблему таким образом.

+0

может показать часть вашего кода? –

+0

: 'arrayList.isEmpty()' недостаточно? – SMA

+0

как насчет метода 'isEmpty()'? –

ответ

1

Это следует сделать это:

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

It что внешние списки могут содержать пустые внутренние списки. Он считает весь 3D-список пустым, если в нем нет карточек.

+0

Компактный, точный, точный. Именно то, что я хотел! Благодаря :) – Infinity

1

вы можете сделать что-то вроде этого

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

или любой ArrayList вы хотите проверить или каким-либо образом вы хотите достичь вашей цели

+0

Я хочу проверить его в конце не в начале. На самом деле, я хочу знать, существует ли карта в одном из списков или это список, который, конечно, состоит только из разделов, колод и карт без каких-либо колод. Потому что в конечном итоге мне нужно работать с картами. – Infinity

+0

Я поместил его в if, чтобы показать его логическое значение. И его единственный пример того, как он работает. Вы можете написать свой код и использовать его, как вы хотите. Позвольте мне отредактировать его –

+0

@Infinity я редактировал свое сообщение. –

Смежные вопросы