如何获取数组列表中前三个最大值的索引

时间:2016-08-11 05:29:51

标签: java

tvalue是我的数组列表,我想在arraylist中检索frist三个最大值的索引,使用下面的代码我得到错误的值可以帮助我

int index = Colletions.max(tvalue);
 if ((index + 1) > 10) {
     data = data + "Node" + (index + 1);
 } else if ((index + 1) <= 10) {
     data = data + "Node-" + (index + 1) + " + ";
     System.out.println((index + 1));
 }
 }
 Collections.sort(tvalue);
 int in = tvalue.indexOf(tvalue.get(tvalue.size() - 2));
 System.out.println(tvalue.get(tvalue.size() - 2)); {
     if (( in +1) > 10) {
         data = data + "Node-" + (( in +1) - 10) + " + ";
         System.out.println(( in +1) - 10);
     } else if (( in +1) <= 10) {
         data = data + "Node-" + ( in +1) + " + ";
         System.out.println(( in +1));
     }
 }

 int id = tvalue.indexOf(tvalue.get(tvalue.size() - 3));
 System.out.println(tvalue.get(tvalue.size() - 3)); {
     if ((id + 1) > 10) {
         data = data + "Node-" + ((id + 1) - 10) + " + ";
         System.out.println((id + 1) - 10);
     } else if ((id + 1) <= 10) {
         data = data + "Node-" + (id + 1) + " + ";
         System.out.println((id + 1));
     }
 }

3 个答案:

答案 0 :(得分:1)

您可以使用一行中的流来完成,请参阅下面的示例。

List<Integer> list = IntStream.range(1000, 2000).boxed().collect(Collectors.toList());
list.stream().sorted((v1,v2)->v2.compareTo(v1)).limit(3).map(v->list.indexOf(v)).forEach(i->System.out.println(i));

答案 1 :(得分:0)

首先按照降序对您的集合进行排序并将其存储到一个临时变量中。现在从顶部选择三个值(这些是您的三个最大值)。现在将此值与原始arraylist进行比较..假设值为1到10,因此您的三个最大值为10,9,并且8.假设我将这些值存储在临时数组中。

int k=0;
for(int i=0; i<collectinolist.count; i++)
{
    for(int j=0; j<temp.count; j++)
    {
          if(collection[i]==temp[j])
          {
            maxthreevalue[k]=i;
            k++;
          }
    }
}

现在你的maxthreevalue变量包含三个索引,其中存储了三个最大值。 感谢。

答案 2 :(得分:0)

首先将您的arrayList复制到另一个arrayList,然后对其进行排序。排序数组将用于了解更大的元素,一旦知道哪个元素最大,就可以使用 unsorted arrayList 中的indexOf()方法来获取索引。如果您在没有先获得副本的情况下对其进行排序,那么您只是丢失了所需的信息。

List sortedValue = new ArrayList<>(tvalue); //gets a copy
Collections.sort(sortedValue);              //sorts the copy
for (int i=1; i<4; i++) {                   //prints the the biggest three
    System.out.println(tvalue.indexOf(tvalue.get(sortedValue.size() - i)));
}