Java 按值列表排序<;地图<;字符串,对象>&燃气轮机;

Java 按值列表排序<;地图<;字符串,对象>&燃气轮机;,java,Java,我正在尝试对oracle数据库的请求进行排序。我收到的格式是 63: "Preasignación" 401: "Categorización de posiciones RPV" 509: "Genérica" 532: "Baja de conservación de número" 537: "Pooles ADSL RIMA" 660: "Activación" 886: "CENTREX" 905: "Conservación de número" 920: "Suspensión y

我正在尝试对oracle数据库的请求进行排序。我收到的格式是

63: "Preasignación"
401: "Categorización de posiciones RPV"
509: "Genérica"
532: "Baja de conservación de número"
537: "Pooles ADSL RIMA"
660: "Activación"
886: "CENTREX"
905: "Conservación de número"
920: "Suspensión y rehabilitación"
955: "STB, AABB, PBX e ISPBX"
正如您所看到的,它们是按数字排序的,但我想按“字母顺序”的值对它们进行排序。我怎么做?请尽量不要被西班牙语代码吓坏:)这是继承的代码。这是我的密码

public ArrayList<String> ObtenerIdsTiposOrdenPorPerfilLdap(String perfiles) {

    String query = "";
    ArrayList<String> tipos = new ArrayList<String>();
    try {
        query = " SELECT ID_PARAMETRO FROM PARAMETRO WHERE EXISTS( " +
                    " SELECT DISTINCT(ID_TIPO_ORDEN) FROM REL_PERF_LDAP_PERF_TP_ORD_SIS " +
                    " WHERE ID_PERFIL_LDAP IN (" + perfiles + ") " +
                    " AND ID_TIPO_ORDEN = -1) " +
                    " AND ID_TIPO_PARAMETRO = " + Parametro.ID_TIPO_PARAMETRO_TIPO_ORDEN +
                    " UNION " +
                    " SELECT ID_PARAMETRO FROM PARAMETRO WHERE ID_PARAMETRO IN ( " +
                    " SELECT DISTINCT(ID_TIPO_ORDEN) FROM REL_PERF_LDAP_PERF_TP_ORD_SIS " +
                    " WHERE ID_PERFIL_LDAP IN (" + perfiles + ")) " +
                    " AND ID_TIPO_PARAMETRO = " + Parametro.ID_TIPO_PARAMETRO_TIPO_ORDEN +
                    " ORDER BY ID_PARAMETRO ";
        List<Map<String, Object>> result = jdbcTemplate.queryForList(query);
        for (Map<String, Object> map : result) {
            tipos.add(String.valueOf(map.get("ID_PARAMETRO")));  
        }
    } catch (Exception e) {
        log.error(e.getMessage());
    } finally {
        query = null;
    }
    return tipos;
}
public ArrayList ObtenerIdsTiposOrdenPorPerfilLdap(字符串性能文件){
字符串查询=”;
ArrayList tipos=新的ArrayList();
试一试{
query=“从存在的PARAMETRO中选择ID\u PARAMETRO(”+
“从REL_PERF_LDAP_PERF_TP_ORD SIS中选择不同的(ID_TIPO_ORDEN)”+
“其中ID_PERFIL_LDAP位于(“+perfiles+”)”+
“和ID_TIPO_ORDEN=-1)”+
“和ID_TIPO_PARAMETRO=“+PARAMETRO.ID_TIPO_PARAMETRO_TIPO_ORDEN+
“工会”+
“从参数中选择ID\u参数,其中ID\u参数位于(”+
“从REL_PERF_LDAP_PERF_TP_ORD SIS中选择不同的(ID_TIPO_ORDEN)”+
其中ID_PERFIL_LDAP位于(“+perfiles+”)+
“和ID_TIPO_PARAMETRO=“+PARAMETRO.ID_TIPO_PARAMETRO_TIPO_ORDEN+
“按ID_参数订购”;
列表结果=jdbcTemplate.queryForList(查询);
用于(映射:结果){
tipos.add(String.valueOf(map.get(“ID_PARAMETRO”));
}
}捕获(例外e){
log.error(例如getMessage());
}最后{
query=null;
}
返回tipos;
}

如果
PARAMETRO
(“PreSignación”,…)的文本描述实际上位于
PARAMETRO
本身(我们称该列为
TXT\u PARAMETRO
),那么要求数据库进行排序就足够了:remove

" ORDER BY ID_PARAMETRO ";

" ORDER BY TXT_PARAMETRO ";

相反。

可能重复使用@KaiserKatze,我已经尝试使用TreeMap,但正如您所见,它是按数字排序的,我希望按字母顺序排列。感谢您抽出一些时间。您接收到的数据看起来比列表更像
Map
,您的SQL无法检索文本值(“PreSignación”,…),因此,我认为问题中缺少了一些代码。我看到您已经接受了我的答案:请注意,现在调用
ObtenerIdsTiposOrdenPorPerfilLdap
的每一段代码都将以与以前不同的顺序获得结果!这可能会产生意想不到的后果。考虑参数化查询排序,或者有两种方法以不同的顺序返回结果,这样您就可以实现修改而不影响现有代码。