Java 如何以最佳方式按字符串对类列表进行排序

Java 如何以最佳方式按字符串对类列表进行排序,java,android,Java,Android,我有一个模型班 class UserMeter{ int id; String meterNo; // meter number in a-z,0-9 String readingValue; //in a-z,0-9 String priority; //{low,medium,high,danger,overflow} //getter setter } 当我调用API时,我会得到UserMeter列表。但结果是随机的。 我想通过按优先级排序来显示结果。 我需要高性能的逻辑/算法来实现这

我有一个模型班

class UserMeter{
int id;
String meterNo; // meter number in a-z,0-9
String readingValue; //in a-z,0-9
String priority; //{low,medium,high,danger,overflow}

//getter setter
}
当我调用API时,我会得到UserMeter列表。但结果是随机的。 我想通过按优先级排序来显示结果。 我需要高性能的逻辑/算法来实现这一点

更新: 我试过的是

Collections.sort(userMeterList, new Comparator<UserMeter>() {
                    @Override
                    public int compare(UserMeter m1, UserMeter m2) {
                        String p1 = m1.getPriority();
                        String p2 = m2.getPriority();
                        if (p1 == null) return 1;
                        if (p2 == null) return -1;
                        if (p1.equals(p2)) return 0;
                        return m1.getPriority().compareTo(m2.getPriority());
                    }
                });
Collections.sort(userMeterList,newcomparator(){
@凌驾
公共整数比较(用户仪表m1、用户仪表m2){
字符串p1=m1.getPriority();
字符串p2=m2.getPriority();
如果(p1==null)返回1;
if(p2==null)返回-1;
如果(p1等于(p2))返回0;
返回m1.getPriority().compareTo(m2.getPriority());
}
});
输出与期望结果不匹配。i、 e.(危险、高、中、低、溢出)
我想显示从低到危险的优先级。(低、中、高、危险、溢出)

首先声明一个映射或任何其他数据结构,为优先级指定一个int值,这样更容易编码。例如:

Map<String, Integer> mp = new HashMap<>();
    mp.put("low", 1);
    mp.put("medium", 2);
    mp.put("high", 3);
    mp.put("danger", 4);
    mp.put("overflow", 5);
Map mp=newhashmap();
mp.put(“低”,1);
议员:付诸表决(“中等”,2);
议员:付诸表决(“高”,3);
议员:付诸表决(“危险”,第4段);
mp.put(“溢出”,5);
然后更新比较函数,如下所示。这应该行得通。如果你不了解任何部分,请告诉我。快乐编码

Collections.sort(userMeters, new Comparator<UserMeter>() {
                @Override
                public int compare(UserMeter m1, UserMeter m2) {
                    if (mp.get(m1.getPriority()) == mp.get(m2.getPriority())) return 0;
                    if (mp.get(m1.getPriority()) > mp.get(m2.getPriority())) return 1;
                    return -1;
                }
            });
Collections.sort(userMeters,newcomparator(){
@凌驾
公共整数比较(用户仪表m1、用户仪表m2){
if(mp.get(m1.getPriority())==mp.get(m2.getPriority())返回0;
if(mp.get(m1.getPriority())>mp.get(m2.getPriority())返回1;
返回-1;
}
});

这是否回答了您的问题?我也在考虑这样做,但万一后端API增加了任何优先级的话。在这种情况下,我必须添加手动代码优先级代码(硬代码)。即使enum也需要重新编译整个源代码。不过,您的解决方案非常适合当前的情况。谢谢golam md。