2011-12-01 104 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); 
    } 
}