Sorting TWO or more arrays in JAVA
我想根据两个数组的数值对它们进行排序。
1 2 | apple[] = [apples, green, 9180, 16.19]; orange[] = [oranges, orange color, 9180, 25.18]; |
我想根据数组中的第三个值(即16.19)对其进行排序
我该怎么办?
注释数组声明仅用于说明目的。
结果必须如下所示:
1 2 3 4 |
号
每行是一个单独的数组。必须根据最后一个数字(即16.19、25.18、35.16)按升序排序
数组有四个字段[苹果,绿色,9180,16.19];苹果:水果的名称;绿色:水果的颜色;9180:农场的pin代码;16.19:水果的产量。我必须根据水果的产量来分类。希望我明白。
我允许自己假设你没有四个变量,分别是
对
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | class a{ public static void main(String[]args){ final int column = 3; Comparable[][] a = new Comparable[][]{ {"oranges","orange color", 9180, 25.18}, {"apples","green", 9180, 16.19}, {"strawberries","red", 9180, 45.36}, {"grapes","green", 9180, 35.16} }; java.util.Arrays.sort(a, new java.util.Comparator<Comparable[]>(){ public int compare(Comparable[]a,Comparable[]b){ return a[column].compareTo(b[column]); } }); for (Comparable[] c : a) System.out.println(java.util.Arrays.toString(c)); } } |
号
输出:
1 2 3 4 | [apples, green, 9180, 16.19] [oranges, orange color, 9180, 25.18] [grapes, green, 9180, 35.16] [strawberries, red, 9180, 45.36] |
如果您想要更通用的东西,您可以定义一个数组比较器,它将比较列作为其构造函数中的参数(参见更新的示例):
1 2 3 4 5 6 7 8 9 | class ArrayComparator implements java.util.Comparator<Comparable[]>{ private int col; public ArrayComparator(int col){ this.col = col; } public int compare(Comparable[] o1, Comparable[] o2){ return o1[col].compareTo(o2[col]); } }; |
。
您可以将数组封装在一个实现可比较接口的类中。这将使您能够使用您想要的任何比较策略。
我们创建了一个实现
解释后更新:
我假设您将这些数组存储在列表或其他数组中。在这种情况下,您可以使用
问题是:
为什么您甚至用属性作为数组来封装项目?我更喜欢一个叫做"水果"的封装类。在这个类中,您可以实现可比较的接口或编写一个单独的比较器。
在那之后,你会得到这样的东西:
1 2 3 4 5 | LinkedList<Fruits> myFruits; Collections.sort(myFruits); // Optional with passed Comparator, myComparator has to implement Comparator Collections.sort(myFruits, myComparator) |
试试这个功能
1 2 3 4 5 |
请参见此处-如何对数组进行排序。