2016-05-20 4 views
0

私は整理番号最高から最低まで

if(label.equalsIgnoreCase("baltop")){ 
     if(!(sender instanceof Player)){ 
      CommandUtils.invalidCommandSender(sender); 
      return true; 
     } 
     File[] files = new File(ServerCore.getPlugin().getDataFolder(), File.separator + "PlayerData").listFiles(); 
     for(File file : files){ 
      FileConfiguration playerData = YamlConfiguration.loadConfiguration(file); 
      double bal = playerData.getDouble("Money"); 
      ChatUtils.sendRawMessage(sender, Bukkit.getOfflinePlayer(UUID.fromString(file.getName().replace(".yml", ""))).getName() + ": " + bal); 
     } 
     return true; 
    } 

それはファイルの順序で全ての価格を言う使用して、フォルダ内のすべてのファイルからダブルスを取得していますが、私は最高から最低までそれらを注文したいです2人のプレーヤーの金額が同じ場合はどうなりますか?

あなたはまず、すべてのコンテンツを読んで、このように、TreeSetの中でそれらを格納する必要があり

答えて

1

if(label.equalsIgnoreCase("baltop")){ 
    if(!(sender instanceof Player)){ 
     CommandUtils.invalidCommandSender(sender); 
     return true; 
    } 
    TreeSet<Balance> set = new TreeSet<>(); 
    set = set.descendingSet(); 
    File[] files = new File(ServerCore.getPlugin().getDataFolder(), File.separator + "PlayerData").listFiles(); 
    for (File file : files){ 
     FileConfiguration playerData = YamlConfiguration.loadConfiguration(file); 
     double bal = playerData.getDouble("Money"); 
     UUID uuid = UUID.fromString(file.getName().replace(".yml", "")); 
     set.add(new Balance(Bukkit.getOfflinePlayer(uuid).getName(), uuid, bal)); 
    } 

    for (Balance b : set) { 
     ChatUtils.sendRawMessage(sender, b.name + ": " + b.balance); 
    } 
    return true; 
} 

private static class Balance implements Comparable<Balance> { 
    public String name; 
    public UUID uuid; 
    public double balance; 
    public Balance(String n, UUID u, double b) { 
     name = n; 
     uuid = u; 
     balance = b; 
    } 
    @Override 
    public int compareTo(Balance b) { 
     double d = balance - b.balance; 
     if (d<-0.001||d>0.001) 
      return (int) Math.signum(d); 

     int e = -name.compareToIgnoreCase(b.name); 
     if (e != 0) 
      return e; 
     return -uuid.compareTo(b.uuid); 
    } 
} 

2人の選手がで、同じバランスを持っている場合は、この実装では、バランスの降順で残高を表示し、されます大文字と小文字を区別せずに名前の昇順で並べ替えます。 UUIDコンパイルは、名前の衝突の最後の手段に過ぎません。なぜなら、bukkitが複数の名前を持つ複数のプレーヤーに大文字と小文字を区別できるかどうかはわかりません。

+0

私にこれを見せてくれてありがとう、それは私にそんなに役立ちます!バランスクラス "return d"に問題があるだけで、 "doubleからintに変換できません"というEclipseエラーが発生します – Kingbluesapphire

+0

"TreeSet set = new TreeSet <>()。descendingSet();" "新しいTreeSet <>()。descendingSet();" 「NavigableSet からツリーセットに変換できません」というエラーが返されます。 – Kingbluesapphire

+0

申し訳ありません。これはそれを修正する必要があります... – glee8e

関連する問題