Попытка сортировать список по убыванию, так долгое время. Это мой метод. Я использовал несколько страниц здесь, чтобы сделать его правильным, однако что-то в моем коде неверно и возвращает список, который не так корректен.сортировка хэш-карты на основе interger
public static ArrayList<String> winnerIs(List<HP> hp){
//System.out.println("1");
int size = hp.size();
//System.out.println(size);
ArrayList<HP> listofWinner = new ArrayList<HP>();
Map<String, Integer> map = new HashMap<String, Integer>();
for(int i = 0; i < size; i++){
listofWinner.add(hp.get(i));
map.put(hp.get(i).getName(), hp.get(i).TD1());
//System.out.println(hp.get(i).getName()+" "+hp.get(i).TD1());
}
//sort based on time
ArrayList<String> keys = new ArrayList<String>(map.keySet());
//System.out.println("---------------");
/*for(int i = 0; i < keys.size(); i++){
//wn.add(keys.get(i));
System.out.println("here "+keys.get(i));
}*/
//System.out.println("---------------");
ArrayList<String> wn = new ArrayList<String>();
//System.out.println("---------------");
for(int i = keys.size()-1; i >= 0; i--){
wn.add(keys.get(i));
}
return wn;
}
вот что reurns:
[team2, team1, team4, team3]
, но это должно быть так:
[team4, team3, team2, team1]
это не имеет значения, если время равно, нам просто нужно лучше время, я не уверен, какая часть кода неверна.
даже когда я использую этот
ArrayList<Integer> s = new ArrayList<Integer>(map.values());
Collections.sort(keys);
//System.out.println("---------------");
for(int i = 0; i < s.size(); i++){
//wn.add(keys.get(i));
System.out.println("here "+s.get(i));
}
результат все еще не исправить здесь то, что она возвращает:
here 2
here 9
here 0
here 0
поэтому я использовал один из страниц в stackoverflouw, и я нашел это решение:
public static ArrayList<String> winnerIs(List<HumanPlayer> hp){
//System.out.println("1");
int size = hp.size();
//System.out.println(size);
ArrayList<HumanPlayer> listofWinner = new ArrayList<HumanPlayer>();
Map<String, Integer> map = new HashMap<String, Integer>();
for(int i = 0; i < size; i++){
listofWinner.add(hp.get(i));
map.put(hp.get(i).getName(), hp.get(i).getTimeDriver1());
//System.out.println(hp.get(i).getName()+" "+hp.get(i).getTimeDriver1());
}
map.entrySet().stream()
.sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
.limit(1000)
.forEach(System.out::println);
return null;
}
это возвращает правильный список, но я не уверен, что это: .limit(1000)
, а также как я могу сопоставить это со списком, чтобы я мог его вернуть.
Вы на самом деле выполняете переупорядочение, а не сортировку. 'HashMap' - неупорядоченная карта. Вместо этого используйте 'LinkedHashMap' или отсортируйте список результатов с помощью' Collections.sort'. –
Вы помещаете имя в качестве ключа и сортируете полученный набор ключей(). Я не знаю, что такое TD1(), но если это время, которое вы хотите отсортировать, тогда вы должны сортировать значения на своей карте, а не в ключах. – Amit
@Amit, как я могу это сделать, это должно быть valueSet() вместо keySet() ?? –