对包含数字和字母的字符串列表进行排序
Sorting a list of strings that contains numbers and letters
我正在尝试对字符串列表进行排序。这些字符串包含用户名和他们的杀戮。我想使用用户名和 - 之前的击杀数对列表进行排序。我已经阅读了 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
}
}
我建议一步一步来:
- 创建带有 id 和 kills 的地图,
- 根据 following topic 的建议对这张地图进行了排序,
- 将键保存到 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;
}
您可以使用 Comparator 来完成。使用 split("-") 将在找到 "-" 和 return 一个 String[] 的地方分隔单个字符串。然后在 Integer.parseInt(((String) o).split("-")[0])) 的帮助下,它将第一个拆分的字符串项转换为整数,比较器可以相应地对列表进行排序。
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());
输出:[5-Username2, 3-Username3, 1-Username1]
我正在尝试对字符串列表进行排序。这些字符串包含用户名和他们的杀戮。我想使用用户名和 - 之前的击杀数对列表进行排序。我已经阅读了 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
}
}
我建议一步一步来:
- 创建带有 id 和 kills 的地图,
- 根据 following topic 的建议对这张地图进行了排序,
- 将键保存到 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;
}
您可以使用 Comparator 来完成。使用 split("-") 将在找到 "-" 和 return 一个 String[] 的地方分隔单个字符串。然后在 Integer.parseInt(((String) o).split("-")[0])) 的帮助下,它将第一个拆分的字符串项转换为整数,比较器可以相应地对列表进行排序。
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());
输出:[5-Username2, 3-Username3, 1-Username1]