2014-01-05 2 views
0

im создание плагина для игры. Мне нужно, чтобы получить 10 значений из Config, и сортировать его в топ-10 он должен печатать топ-10, как:нужно сделать 10 лучших строк и int's

1. Name + points 
2. Name + points 
. 
. 
. 
10. Name + points 

С кодом, который я вставил ниже, я получил:

[name1, name2, name3, name4][points1,points2,points3]

и он не сортируется, как хотелось бы. Это должно быть от самого высокого до самого низкого [10 resoults]

for (String g : Rpgg.getConfig().getConfigurationSection("Stats").getKeys(false)){ 
    // Set<String> g = Rpgg.getConfig().getConfigurationSection("Stats").getKeys(false); 
    // int[] i1 = new int[]{i}; 
    int i = Rpgg.getConfig().getInt("Stats."+g+".pkt"); 
    l.add(i); 

    a.add(g); 
    Collections.sort(a); 

    Collections.sort(l); 
    map.put(g,i); 
} 

sorted_map.putAll(map); 
Bukkit.broadcastMessage("lp:"+ "§4G:§6 " + a + " §4pkt§6 " + l); 
+0

ли это в настоящее время дает вам низшего к высшему? –

+0

Это дает мне самое низкое к самому высокому. – Ethris

ответ

0

«Это дает мне самое низкое к высшему».

Если вы в настоящее время становится низшего к высшему, и вы хотите его в обратном порядке, просто используйте

  • Collections.reverseOrder() - Возвращает компаратор, который налагает реверс естественного упорядочения на коллекции объекты, реализующие интерфейс Comparable.

В вашем случае:

Collections.sort(a, Collections.reverseOrder()); 

Collections.reverseOrder() возвращает Comparator. Используйте этот Collections.sort перегруженный метод, который принимает Comparator в качестве аргумента

public static void sort(List list, Comparator c) 

EDIT - на комментарий пользователя

«Окей, теперь я хочу, чтобы изменить Даты списка в междунар и строки . Как это сделать ?"

Что вы должны сделать, это класс, который имеет name поле и score поле и сделать его реализовать Comparable как

public class User implements Comparable<User> { 
    String name; 
    int score; 

    public User(String name, int score){ 
     this.name = name; 
     this.score = score; 
    } 

    public int compareTo(User user){ 
     return user.getScore() - this.getScore(); 
    } 

    public String getName(){ 
     return name; 
    } 

    public int getScore(){ 
     return score; 
    } 

    public String toString(){ 
     return "Name: " + name + " Score: " + score; 
    } 
} 

Тогда вы можете просто User objects и имеют List<User>, что вы можете сортировать все в одном, не сортируя оценки и имена.

List<User> userList = new ArrayList<User>(); 
// populate list 
Collections.sort(userList); 

Метод toString даст вам результат в виде строки.Просто вывести User объект


Test Run

import java.util.Collections; 
import java.util.List; 

public class UserDemo { 

    public static void main(String[] args) { 
     List<User> users = new ArrayList<User>(); 
     users.add(new User("Jim", 4398)); 
     users.add(new User("James", 9880)); 
     users.add(new User("Jane", 10238)); 
     users.add(new User("Jack", 5498)); 
     users.add(new User("Josh", 6530)); 
     users.add(new User("John", 12349)); 
     users.add(new User("Jim", 9438)); 
     users.add(new User("Jill", 12307)); 
     users.add(new User("Jimbo", 23454)); 
     users.add(new User("Jason", 5430)); 

     Collections.sort(users); 

     for (User user : users) { 
      System.out.println(user); 
     } 
    } 
} 

Выход:

Name: Jimbo Score: 23454 
Name: John Score: 12349 
Name: Jill Score: 12307 
Name: Jane Score: 10238 
Name: James Score: 9880 
Name: Jim Score: 9438 
Name: Josh Score: 6530 
Name: Jack Score: 5498 
Name: Jason Score: 5430 
Name: Jim Score: 4398 
+0

oK, теперь я хочу изменить список данных в int и строку. Как это сделать ? – Ethris

+0

Вы должны создать класс, в котором есть поле имени и поле оценки, и заставить его реализовать Comparable. –

+0

Посмотрите мой ** EDIT **, чтобы узнать, о чем я говорю. –

0

Вы можете использовать двумерный массив с вместо вашей информации 2 одинарных.

Смежные вопросы