首页 文章

无法对字符串的 ArrayList 进行排序

提问于
浏览
0

我正在尝试按字母顺序对 String 的数组列表进行排序,我尝试了所有方法,从简单的方法开始:

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 回答

  • 3

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

    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
    

    只是 upper-case 个字母优先。

    编辑:如果要 case-insensitive 排序,请使用:

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

    如以下 Natix 所建议。

  • 2

    大写字符先于小写字符。

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

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

    Collections.sort(rList, String.CASE_INSENSITIVE_ORDER);
    

相关问题