0

文字列の配列リストをアルファベット順に並べ替えようとしています。簡単な方法からすべてを試しました。

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があり、そのメソッドの1つが私を返します。文字列のリスト。

文字列のリストは、辞書のように(アルファベット順に)並べ替えられると想定されていますが、「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;
}

これはJbossAS5.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
4

2 に答える 2

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によって提案されたように。

于 2012-08-09T16:54:50.967 に答える
2

大文字は小文字の前にあります。

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

大文字と小文字を区別しない方法で文字列リストを並べ替えるには、次のコンパレータを使用できます。

Collections.sort(rList, String.CASE_INSENSITIVE_ORDER);
于 2012-08-09T16:57:31.463 に答える