我想根据他们的得分对一些替代方案进行排名,并用其排名打印每种替代方案的名称,我该怎么做?

这是MWE:

import java.util.Arrays;
public class Ranking {
public static void main(String[] args) {

//The score of the alternatives :
double [] score = new double [4] ;
score[0] = 6.75 ;
score[1] = 9.0 ;
score[2] = 6.75 ;
score[3] = 5.50;

//The name of the alternatives :
String [] name = new String [4] ;
name[0] = "a1";
name[1] = "a2";
name[2] = "a3";
name[3] = "a4";

//Descending Sorting the score array like this :
for(int i=0;i<4;i++)
score[i]= - score[i];

Arrays.sort(score);

for(int i=0;i<4;i++)
score[i]= - score[i];

//print the result
for(int i=0;i<4;i++)
System.out.println(score[i] + " rank = " + (i+1));
}
//result :
//9.0 rank = 1
//6.75 rank = 2
//6.75 rank = 3
//5.5 rank = 4


但是我想要这样的结果:

name : a2 a1 a3 a4
rank : 1  2  3  4


我怎样才能做到这一点 ?

最佳答案

您应该为此使用Map<String, Double>

请尝试以下示例:

Map<String, Double> map = new HashMap<>();
      map.put("a1", 6.75);
      map.put("a2", 9.0);
      map.put("a3", 6.8);

      map = map.entrySet().stream()
      .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
      .collect(Collectors.toMap(
         Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));

//Iterate through the map


您将获得反向排序的答案。

.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))用于按值排序,LinkedHashMap::new用于维护Map的顺序

关于java - 根据他们的分数对替代方案进行排名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50196880/

10-09 19:37