2016-11-27 125 views
0

我有一個3維ArrayList,我想確定它是否爲空。有一個例外EmptyCollectionException這是不是Java標準庫的一部分,因此我不允許使用它。如何確定集合是否爲空

有沒有辦法使用本地java異常或函數來完成該操作?

三維列表構造如下:

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

當我經歷當然,章節和甲板創建爲每一個列表。只有一門課程,許多章節,許多套牌,當然還有許多卡片,如果他們通過了先決條件,它們將保存在甲板雙向鏈接列表下。如果沒有卡通過該條件,我有一個存在但沒有卡的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; 
} 

它考慮到外部列表可能包含空的內部列表。如果沒有卡片,它會將整個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

我已經把它放在一個如果要顯示它的布爾值。它只是它如何工作的一個例子。你可以編寫你的代碼並使用它,但是你想要。我可以編輯它 –

+0

@Infinity我編輯了我的文章。 –