如何基于Java中的特定元素对对象的多维数组进行排序

时间:2019-03-30 19:40:13

标签: java sorting

我正在建立一个多维的对象数组,我想按子数组内的特定元素对其进行排序。

我尝试了Collections.sort和bubbleSort,但是它们没有用。

Object[][] fields = {{
      "sam", "mccarty",
      "m", "1988/06/01", 5.0, true
   },
   {
      "tom", "huges",
      "m", "1988/06/01", 7.0, true
   },
   {
      "jim", "ross",
      "m", "1988/06/01", 6.5, true
   }
};

我希望该数组按子元素[4]排序,所以:

 {
   {
      "tom", "huges",
      "m", "1988/06/01", 7.0, true
   },
   {
      "jim", "ross",
      "m", "1988/06/01", 6.0, true
   },
   {
      "sam", "mccartney",
      "m", "1988/06/01", 5.5, true
   }
}

2 个答案:

答案 0 :(得分:0)

如果所有字段都遵循相同的架构, 最好将它们包装在某个对象(例如Person)中,这样您就可以获得一维数组,然后使用自定义比较器对该数组进行排序。

您可以执行以下操作:

Person[] fields = {
    new Person("sam", "mccarty", "m", "1988/06/01", 5.0, true),
    ...
};
// Assuming you want things to be sorted in descending order like in your example.
Collections.sort((o1, o2) -> o2.getFourth() - o1.getFourth());

您可以在文档中找到有关比较器的更多信息 here

答案 1 :(得分:0)

您可以使用:

Arrays.sort(fields, (o1, o2) -> Double.compare((Double) o1[4], (Double) o2[4]));

排序后的双精度值输出为:

5.0
6.5
7.0

更好的解决方案

但是我会创建一个对象,将必要的字段如下所示:

class MyObject{
    private String fname;
    private String lname;
    private String gender;
    private LocalDate birthDay;
    private Double note;
    private boolean check;
   // @Getter @Setter @Constructors
}

然后排序很容易:

MyObject[] array = {...};
Arrays.sort(array, Comparator.comparing(MyObject::getNote));