在ArrayList <list <double>&gt;中查找max-value的索引? (JAVA)

时间:2015-12-12 15:22:02

标签: java list arraylist

我是Java的新手,我创建了以下列表:

List<List<Double>> Sums= new ArrayList<List<Double>>();

我想知道元素的索引(和列表)。

不幸的是,元素是可变的,它取决于我首先给出的方法参数。 例如:

public List<Integer> method(int parameter){...}

如果参数等于0,则搜索到的元素应为ALL列表的最大值。

如果参数等于1,则搜索到的元素应该是ALL列表的第二大值。

如果参数等于&#34; n&#34;,搜索到的元素应该是ALL列表的最大值(n + 1)。

I have also visualized the problem

我非常感谢任何与我分享他的想法的人! 谢谢!

1 个答案:

答案 0 :(得分:0)

取消JB Nizet的建议,您可以创建一个包装器对象来保存数据的数据和索引。

class Element implements Comparable<Element> {

    private int data;
    int innerIndex, outerIndex;

    public Element(int data, int innerIndex, int outerIndex) {
        this.data = data;
        this.innerIndex = innerIndex;
        this.outerIndex = outerIndex;
    }

    public int getData() {
        return data;
    }

    public List<Integer> getIndicies() {
        return Arrays.asList(outerIndex+1, innerIndex+1);
    }

    @Override
    public int compareTo(Element o) {
        // negate to sort descending
        return -1*Integer.compare(this.data, o.data);
    }
}

然后,您可以迭代数据并将其展平为这些元素的单个列表。此方法接受列表列表,展平它,根据元素数据值对其进行排序,并返回第n个最大元素。

public Element getNthMax(List<List<Integer>> sums, int n) {
    List<Element> flatList = new ArrayList<Element>();

    for (int i = 0; i < sums.size(); i++) {
        List<Integer> innerList = sums.get(i);
        for (int j = 0; j < innerList.size(); j++) {
            Element e = new Element(innerList.get(j), j, i);
            flatList.add(e);
        }
    }

    Collections.sort(flatList);
    return flatList.get(n);
}

如果我们要关注您的示例,我们会创建您的数据列表并使用它调用此方法。

List<List<Integer>> sums = new ArrayList<List<Integer>>();

sums.add(Arrays.asList(1, 3, 6));
sums.add(Arrays.asList(4, 3, 8, 1));
sums.add(Arrays.asList(1, 3));

Element max = getNthMax(sums, 0);
Element secondMax = getNthMax(sums, 1);

System.out.println(max.getIndicies()); // [2, 3]
System.out.println(secondMax.getIndicies()); // [1, 3]