Trying to sort a list in descending order, so longest time first. This is my method I used few pages from here to make it correct however something in my code is wrong and it returns the list which is not so correct.
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;
    }
here is what it reurns:
[team2, team1, team4, team3]
but it should be like this:
[team4, team3, team2, team1]
it doesn't matter if the time is equal, we just need the better time, I am not sure what part of the code is wrong.
even when I use this
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));
        }
the result are still not correct here is what it returns:
here 2
here 9
here 0
here 0
so I used one of the pages at stackoverflouw and I found this solution:
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;
    }
this returns the correct list but I am not sure what is this: .limit(1000) and also how can I equal this to a list, so I can return it.
 
     
     
    