java arraylist 如何对与字符串混合的 Int 值进行排序

java arraylist how to sort Int value that mixed with string

我的数组列表:

"LVL:100 MONEY:1489 MANA: 42,1",
"LVL:67 MONEY:389 MANA: 33,5",
"LVL:47 MONEY:4229 MANA: 59,7",
"LVL:120 MONEY:1189 MANA: 94,5",
"LVL:150 MONEY:189 MANA: 19,2",

所以我希望它按货币价值排序

"LVL:47 MONEY:4229 MANA: 59,7",
"LVL:100 MONEY:1489 MANA: 42,1",
"LVL:120 MONEY:1189 MANA: 94,5",
"LVL:67 MONEY:389 MANA: 33,5",
"LVL:150 MONEY:189 MANA: 19,2",

这是我使用 Streams API 的尝试。我创建了一个新的 Comparator 以提供给 sorted 方法,以便根据钱在字符串中出现的位置对钱进行排序。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class SortMoney {

    public static void main(String[] args) {
    List<String> playerstats = Arrays.asList("LVL:100 MONEY:1489 MANA: 42,1",
                                             "LVL:67 MONEY:389 MANA: 33,5",
                                             "LVL:47 MONEY:4229 MANA: 59,7",
                                             "LVL:120 MONEY:1189 MANA: 94,5",
                                             "LVL:150 MONEY:189 MANA: 19,2");

    List<String> sortedPlayerStates = playerstats.stream()
                                                 .map(data -> data.split(":"))
                                                 .sorted((o1, o2) -> {
                                                     int a = Integer.parseInt(o1[2].split(" ")[0]);
                                                     int b = Integer.parseInt(o2[2].split(" ")[0]);
                                                     if (a > b) {
                                                     return -1;
                                                     } else if (b > a) {
                                                     return 1;
                                                     } else {
                                                     return 0;
                                                     }

                                                 })
                                                 .map(data -> String.join(":", data))
                                                 .collect(Collectors.toList());

    sortedPlayerStates.forEach(System.out::println);
    }

}

输出:

让我知道这是否是您想要的结果。

编辑: 将代码更改为存储在变量中,以备日后操作。