【问题标题】:Sorting ArrayList by sting length in java在java中按字符串长度对ArrayList进行排序
【发布时间】:2015-10-16 06:33:44
【问题描述】:

我有一个数组列表

ArrayList<String[]> matches = new ArrayList<String[]>();

Collections.sort(matches, new Comparator<String>() {
    @Override
    public int compare(String word1, String word2) {
        return word2.length() - word1.length();
        }
    });

我想按 ArrayList 中字符串的长度对这个 ArrayList 进行排序。我希望列表按降序排列。

Input = ace, a, apple, cord

Output = apple, cord, ace, a

【问题讨论】:

  • ace, a, apple, cord 只是 ArrayList&lt;String&gt;,不是 ArrayList&lt;String[]&gt;。
  • 请说明您迄今为止为解决此问题所采取的步骤。
  • 你在哪里尝试解决这个问题?

标签: java sorting arraylist


【解决方案1】:

这适用于 Java 8。

Collections.sort(dictionary, (a, b)->Integer.compare(a.length(), b.length()));

【讨论】:

    【解决方案2】:

    从Java 8开始可以直接使用List.sort()的方法:

    List<String> stringList = Arrays.asList("ace", "a", "apple", "cord");
    stringList.sort(Comparator.comparingInt(String::length).reversed());
    

    stringList 将按降序排列:

    apple, cord, ace, a
    

    【讨论】:

      【解决方案3】:

      这就是你将如何使用 ArrayList 来完成你的程序。确保导入正确的 java.util 类。

          public static void main(String args[])
      {
          String matches[] = {"ace", "a", "apple", "cord"};
          List<String> list = new ArrayList<String>();
          Collections.addAll(list, matches);
          Collections.sort(list, new Comparator<String>(){
              public int compare(String o1, String o2)
              {
                  return o1.length() - o2.length();
              }
          });
      
          Collections.reverse(list);
          System.out.println(list);
      }
      
      Input: "ace", "a", "apple", "cord"
      Output: [apple, cord, ace, a]
      

      附:这已经过测试,可以完全按照您的方式工作。

      【讨论】:

        【解决方案4】:

        你需要实现一个比较器,像这样:

        class stringLengthComparator implements Comparator<String> {
            public int compare(String o1, String o2) {
                if (o1.length() > o2.length()) {
                    return 1;
                } else if (o1.length() < o2.length()) {
                    return -1;
                } else {
                    return 0;
                }
            }
        }
        

        然后您只需像这样对 ArrayList 进行排序:

        Collections.sort(matches, new stringLengthComparator());
        

        【讨论】:

        • Collections.sort,不是Arrays.sort
        【解决方案5】:
        1. 您的输入可能是 List&lt;String&gt;,而不是 List&lt;String[]&gt;。

        2. 为了对列表进行排序,您需要使用 java.util.Collections.sort 方法和自定义比较器,按长度比较元素:

          List<String> list = Arrays.asList(
                  "ace", "a", "apple", "cord"
          );
          
          Collections.sort(list, new Comparator<String>() {
              @Override
              public int compare(String o1, String o2) {
                  return o2.length() - o1.length();
              }
          });
          
          System.out.println(list);
          

        【讨论】:

          猜你喜欢
          • 2011-11-26
          • 2012-12-24
          • 1970-01-01
          • 1970-01-01
          • 2010-10-18
          • 1970-01-01
          • 2015-01-16
          • 1970-01-01
          • 2014-11-27
          相关资源
          最近更新 更多