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));
}
}
答案 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)));
}