【问题标题】:Sorting an ArrayList<ArrayList<Integer>> by the third element in the ArrayList<Integer>按 ArrayList<Integer> 中的第三个元素对 ArrayList<ArrayList<Integer>> 进行排序
【发布时间】:2017-07-30 05:53:00
【问题描述】:

我很难找到按ArrayList&lt;Integer&gt; 中的第三个元素对ArrayList&lt;ArrayList&lt;Integer&gt;&gt; 进行排序的方法。例如,给定

ArrayList&lt;ArrayList&lt;Integer&gt;&gt; = [[5,4,0],[3,2,1],[3,3,3],[2,2,2]]

我想对它进行排序,使ArrayList&lt;Integer&gt;s 按第三个元素升序排列,给出输出:

ArrayList&lt;ArrayList&lt;Integer&gt;&gt; = [[5,4,0],[3,2,1],[2,2,2],[3,3,3]]

我之前使用Collections 对 ArrayList 进行排序,但这个有点棘手。

下面的 java 代码也可能有助于理解我遇到的问题。

public static void main(String[] args){
   ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();

   Random rand = new Random();
   for(int i=0; i<3; i++){
       ArrayList<Integer> components = new ArrayList<Integer>();
       components.addAll(Arrays.asList(rand.nextInt(10),rand.nextInt(10),rand.nextInt(10)));
       list.add(components);
   }
   System.out.println(list);
   sort(list);

}

public static void sort(ArrayList<ArrayList<Integer>> list){
    for(int i=0; i<list.size(); i++){
        //Here is where I want to sort the list by the element retrieved from the println below
        System.out.println(list.get(i).get(2));
    }
}

感谢任何帮助。感谢您的宝贵时间。

【问题讨论】:

  • 第三个元素是独一无二的吗?或者他们可能会重复?
  • 它们不是唯一的,可能有多个
  • list.sort(Comparator.comparing(l -&gt; l.get(2)));
  • 谢谢 shmosel 按预期工作

标签: java sorting arraylist


【解决方案1】:

您可以使用Arrays.asList 来构造您的List&lt;List&lt;Integer&gt;&gt;(请对接口进行编程)并假设您使用的是Java 8+,您可以编写一个带有lambda 的Comparator。喜欢,

public static void main(String[] args) {
    List<List<Integer>> al = Arrays.asList( //
            Arrays.asList(5, 4, 0), Arrays.asList(3, 2, 1), //
            Arrays.asList(3, 3, 3), Arrays.asList(2, 2, 2));
    Collections.sort(al, (a, b) -> a.get(2).compareTo(b.get(2)));
    // Collections.sort(al, (a, b) -> Integer.compare(a.get(2), b.get(2)));
    System.out.println(al);
}

哪些输出

[[5, 4, 0], [3, 2, 1], [2, 2, 2], [3, 3, 3]]

【讨论】:

  • 但是你能根据第三个元素解释它是如何工作的吗?
  • @Salman 在 lambda 表达式 (a, b) -&gt; Integer.compare(a.get(2), b.get(2)) 中,我们将a 的第三个元素与b 的第三个元素进行比较(第一个是0,第二个是1)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
相关资源
最近更新 更多