2

我在查找已放入多维数组列表的一些数据时遇到问题。我基本上有一个充满数组列表的数组列表......

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

所以现在我想使用 indexOf 来查找包含特定数据的数组列表,因为我正在将它与同一个数组列表中的其他数据进行比较。

例如,我知道我可以使用 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))

但我不确定:(

4

3 回答 3

1

不幸的是,这是不可能的。比那更多的

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

是不正确的,因为array.get(????).get(0)它将是一个整数并且array是 s 的一个ArrayListArrayList而不是Integers。

于 2011-12-01T00:15:02.477 回答
0

你可以使用外部库吗?如果是,那么番石榴定义 Iterables.indexOf(Iterable, Predicate)

然后你可以像这样查找你的数组:

final int whatYoureLookingFor = 1232;
int index = Iterables.indexOf(array, new Predicate<ArrayList<Integer>>() {
        public boolean apply(ArrayList<Integer> a) {
             return a.contains(whatYoureLookingFor);
        }
    });
于 2011-12-01T00:21:54.267 回答
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);
    }
}
于 2011-12-01T00:21:56.170 回答