Android 如何在arraylist中对数字进行排序?

Android 如何在arraylist中对数字进行排序?,android,Android,如何在arraylist中对数字进行排序,我有这个arraylist ArrayList<String> array = new ArrayList<String>(); {"H - 1","N - 15","C - 7","Q - 95","Z - 193"} //Values in array above 这些数字是唯一的吗?还是信?如果是,那么您可以这样做: 首先,我将拆分您的值,以使数字和字母彼此分开: String[] parts = value.split(

如何在arraylist中对数字进行排序,我有这个arraylist

ArrayList<String> array = new ArrayList<String>();
{"H - 1","N - 15","C - 7","Q - 95","Z - 193"} //Values in array above

这些数字是唯一的吗?还是信?如果是,那么您可以这样做:

首先,我将拆分您的值,以使数字和字母彼此分开:

String[] parts = value.split(" - ");
Integer number = Integer.parseInt(parts[1]);
String letter = parts[0];
然后我将它存储在
地图中

Map<Integer,String> exampleMap = new TreeMap<>();
因为您使用了
TreeMap
(它实现了
SortedMap
),您的项目在迭代时将自动排序:

for(Map.Entry<Integer,String> entry : exampleMap.entrySet()){
    System.out.println(entry.getValue());
}
for(Map.Entry:exampleMap.entrySet()){
System.out.println(entry.getValue());
}

迭代时,您可以访问键和值,因此还可以将这两部分连接在一起,并将它们放入
字符串
数组中。

您可以使用Collections.sort和自定义比较器来决定排序顺序。
Ben van Hartingsveldt'Y'
当前接受的答案不处理ArrayList中的重复项

Collections.sort(array, new Comparator<String>() {
            public int compare(String a, String b) {
                String tokA[] = a.split(" - ");
                String tokB[] = b.split(" - ");
                int valueCompare = Integer.parseInt(tokB[1]) - Integer.parseInt(tokA[1]);
                if(valueCompare == 0) {
                    return tokA[0].compareTo(tokB[0]);
                } else {
                    return valueCompare;
                }
            }
        });

您遇到问题的代码是什么?你的代码有什么问题?你收到错误信息了吗?错误消息是什么?你得到的结果不是你期望的结果吗?你期望得到什么样的结果?为什么?你会得到什么样的结果?两者有什么不同?你观察到的行为是否不是期望的行为?期望的行为是什么?为什么?观察到的行为是什么?它们有什么不同?请提供一个。@JörgWMittag我不知道怎么做。你可以通过编写一个程序来完成。如果您的程序有问题,请仔细阅读您正在使用的所有方法、类、模块和库的文档,为您的程序编写测试,用笔和纸跟踪执行情况,在调试器中单步执行,然后对其进行休眠,从头开始,再次休眠,然后,也只有这样,才能将你的问题缩小到一个简洁、集中、简单、简短、可重复的范围,并提出一个具体、集中、狭窄的问题。我不能通过集合来完成。排序?
Collections.sort()
只接受
List
,其中
t
是你比较的类的类型。如果您尝试对数组进行排序(在将其转换为带有
数组的列表后,asList()
),它将首先按字母排序,因为您没有拆分字符串。
for(Map.Entry<Integer,String> entry : exampleMap.entrySet()){
    System.out.println(entry.getValue());
}
Collections.sort(array, new Comparator<String>() {
            public int compare(String a, String b) {
                String tokA[] = a.split(" - ");
                String tokB[] = b.split(" - ");
                int valueCompare = Integer.parseInt(tokB[1]) - Integer.parseInt(tokA[1]);
                if(valueCompare == 0) {
                    return tokA[0].compareTo(tokB[0]);
                } else {
                    return valueCompare;
                }
            }
        });
Z - 193
Z - 193
Q - 95
N - 15
C - 7
E - 1
H - 1