无法对String的ArrayList进行排序

时间:2012-08-09 16:19:01

标签: java string arraylist

我要按字母顺序对String的arraylist进行排序, 我尝试了一切, 从简单的方式:

List<String> theList = new ArrayList<String>();
theList.add("silex");theList.add("soliton");
theList.add("snake");theList.add("supracanon");
Collections.sort(theList);

更具异国情调:

List<String> theList = new ArrayList<String>();
theList.add("silex");theList.add("soliton");
theList.add("snake");theList.add("supracanon");
Collections.sort(
  theList, 
  new Comparator<String>() 
  {
    public int compare(String lhs, String rhs) 
    {
      return lhs.compareTo(rhs);
    }
  }
);

但没有任何作用,我做错了什么? 感谢。

ps:我正在查看生成的ArrayList的内容,如下所示:

for (String temp:listeProduitPredit){
            System.out.println(temp);
        } 

列表内容在排序过程之前和之后不会改变。

=============================================== ============================== 好吧,这是实际的代码,我有一个EJB做数据库访问, 其中一个方法是返回我的字符串列表。

字符串列表可以像在字典中一样进行排序(按字母顺序排列) 但是'Collections.sort(rList)'什么都不做(输入=输出)

public List<String> rechercherListeDeProduitCommencantPar(Integer gammeId, Integer familleId, String debutProduit) {
    Criteria c = HibernateUtil.getSessionFactory().getCurrentSession().createCriteria(Produit.class, "p");
    c.createAlias("p.famille", "f").createAlias("f.gamme", "g");

    if (gammeId != null) {
        c.add(Restrictions.eq("g.id", gammeId));
    }
    if (familleId != null) {
        c.add(Restrictions.eq("f.id", familleId));
    }
    if (!debutProduit.equals("")) {
        c.add(Restrictions.like("p.designation", debutProduit+"%"));
    }

    //getting only the interesting intels (product's name)
    List<String> rList = new ArrayList<String>();
    List<Produit> pList = c.list();
    for (Produit p : pList){
        rList.add(p.getDesignation());
    }
    Collections.sort(rList);
    return rList;
}

这是在Jboss AS 5.1服务器上运行,我使用for之前和之后测试它,列表没有按字母顺序排序,但它确实被修改了一点:

18:44:07,961 INFO  [STDOUT] Before=========
18:44:07,961 INFO  [STDOUT] SUMO VIE
18:44:07,961 INFO  [STDOUT] soliton
18:44:07,961 INFO  [STDOUT] snake
18:44:07,961 INFO  [STDOUT] SupraCanon
18:44:07,961 INFO  [STDOUT] Segolene
18:44:07,961 INFO  [STDOUT] silex
18:44:07,962 INFO  [STDOUT] After=========
18:44:07,962 INFO  [STDOUT] SUMO VIE
18:44:07,962 INFO  [STDOUT] Segolene
18:44:07,962 INFO  [STDOUT] SupraCanon
18:44:07,962 INFO  [STDOUT] silex
18:44:07,962 INFO  [STDOUT] snake
18:44:07,962 INFO  [STDOUT] soliton

2 个答案:

答案 0 :(得分:3)

您的“after”数组按字母顺序排序:

18:44:07,962 INFO  [STDOUT] After=========
18:44:07,962 INFO  [STDOUT] SUMO VIE
18:44:07,962 INFO  [STDOUT] Segolene
18:44:07,962 INFO  [STDOUT] SupraCanon
18:44:07,962 INFO  [STDOUT] silex
18:44:07,962 INFO  [STDOUT] snake
18:44:07,962 INFO  [STDOUT] soliton

只是大写字母优先。

编辑:如果您想要不区分大小写的排序,请使用:

theList.add("SUMO VIE");theList.add("soliton");
theList.add("snake");theList.add("supracanon");
Collections.sort(theList, String.CASE_INSENSITIVE_ORDER);

如下面的Natix所建议。

答案 1 :(得分:2)

大写字符位于小写字符之前。

"SUMO VIE".compareTo("Segolene") < 0

要以不区分大小写的方式对字符串列表进行排序,可以使用此比较器:

Collections.sort(rList, String.CASE_INSENSITIVE_ORDER);