排序包含数字和字母的字符串列表

时间:2020-11-10 13:45:32

标签: java arrays list sorting bukkit

我正在尝试对字符串列表进行排序。字符串包含用户名及其终止符。我想使用用户名和-之前的杀死次数对列表进行排序。我已经阅读了有关Comparator的文章,并尝试了一些没有运气的事情。

public class Test {
    public static List<String> TOP10_Players = new ArrayList<>();
    
    public static void AddPlayers() {
        // TOP10_Players.add("[Kills]-[Username]");
        TOP10_Players.add("1-Username1");
        TOP10_Players.add("2-Username2");
        TOP10_Players.add("3-Username3");
        
        SortList();
    }
    
    public static void SortList() {
        // Code to sort list
    }
}

2 个答案:

答案 0 :(得分:5)

您可以使用比较器来完成。使用split(“-”)将分隔找到“-”的单个字符串并返回String []。然后借助Integer.parseInt((((String)o).split(“-”)[0])),它将第一个拆分的String项转换为Integer,比较器可以对列表进行相应的排序。

WHERE NOT

输出:TOP10_Players.sort(Comparator.comparing((Object o) -> Integer.parseInt(((String) o).split("-")[0])));

降序:

[1-Username1, 3-Username3, 5-Username2]

输出:TOP10_Players.sort(Comparator.comparing((Object o) -> Integer.parseInt(((String) o).split("-")[0])).reversed());

答案 1 :(得分:2)

我建议分步进行:

  1. 使用id和kills创建地图,
  2. 使用following topic的建议对此地图进行了排序,
  3. 将键保存到ArrayList,

例如(草稿,不检查):

public static void SortList() {
    Map<String, Value> map = new HashMap();
    for(String playerAndKill: TOP10_Players) {
        String parts = playerAndKill.split('-');
        int kills = Integer.parseInt(parts[0]);
        map.put(playerAndKill, kills); 
    }
    TOP10_Players = sortByValue(map).keySet();
}


public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
    List<Entry<K, V>> list = new ArrayList<>(map.entrySet());
    list.sort(Entry.comparingByValue());

    Map<K, V> result = new LinkedHashMap<>();
    for (Entry<K, V> entry : list) {
        result.put(entry.getKey(), entry.getValue());
    }

    return result;
}