2011-12-01 122 views
2

我在查找一些數據時遇到了問題,這些數據已放入多維數組列表中。我基本上有一個ArrayList充分的ArrayList的...多維數組列表索引

ArrayList<ArrayList<Integer>> array = new ArrayList<ArrayList<Integer>>(); 

所以現在我想用的indexOf查找包含具體的數據,因爲我在同一個ArrayList中比較它與其他數據ArrayList中。

例如,我知道我可以使用一個for循環來找到這個數據 -

for (i = 0; i < array.size(); i++) 
{ 
    if (array.get(a).get(0) == array.get(i).get(0)) 
     //then do something 
} 

但我認爲這將會是更容易使用的indexOf或lastindexOf。有誰知道我會使用它的正確方法?我想這件事情就像

array.indexOf(array.get(????).get(0)) 

,但我不知道:(

+0

我認爲這裏使用indexOf的唯一方法是在afor循環中。 –

+0

你在找什麼物件? array.get(** a **)。get(0)在第二個片段中是什麼? – soulcheck

回答

1

不幸的是,這是不可能的。更重要的是

array.indexOf(array.get(????).get(0)) 

是不正確的,因爲array.get(????).get(0)將是一個整數和arrayArrayListArrayList s,而不是Integer s。

+0

好的,這是有道理的。我猜是for循環吧!謝謝! – sjhaw

0

可以使用外部庫raries?如果是的話那麼guava定義Iterables.indexOf(可迭代,謂語)

然後你可以看一下你數組是這樣的:

final int whatYoureLookingFor = 1232; 
int index = Iterables.indexOf(array, new Predicate<ArrayList<Integer>>() { 
     public boolean apply(ArrayList<Integer> a) { 
      return a.contains(whatYoureLookingFor); 
     } 
    }); 
0

首先,我們需要一個協調的容器。那麼我們需要一個查找方法。這使他們都使用工廠方法。然後,您可以將MultiIndex傳遞給一個列表,它將在那裏檢索值。

class MultiIndex<E> { 

    static <E> MultiIndex<E> indexOf(List<List<E>> list, E e) { 
     for(int i = 0; i < list.length; i++) { 
      List<E> in = list.get(i); 
      int index = in.indexOf(e); 
      if(index > -1) return new MultiIndex(i,index); 
     } 
     return null; 
    } 
    int outside; 
    int inside; 
    private MultiIndex(int out, int in) { 
     outside = out; 
     inside = in; 
    } 

    E get(List<List<E>> list) { 
     return list.get(outside).get(inside); 
    } 
}