我正在建立一个多维的对象数组,我想按子数组内的特定元素对其进行排序。
我尝试了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
}
}
答案 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));