我要按字母顺序对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
答案 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);