如何按内部数组的字段之一排序多维数组?
在Java中,我如何创建这样的多维数组?如何按X字段排序?任何的例子吗?
Array
(
[0] => Array
(
[name] => Sony TV
[price] => 600.00
)
[1] => Array
(
[name] => LG TV
[price] => 350.00
)
[2] => Array
(
[name] => Samsung TV
[price] => 425.00
)
}
使用Arrays.sort
对多维数组进行排序。假设Data是自定义类。
Arrays.sort(data, new Comparator<Data[]>() {
@Override
public int compare(final Data[] data1, final Data[] data2) {
final String name1 = data1[0].name;
final String name2 = data2[0].name;
return name1.compareTo(name2);
}
});
如果你需要对内部数组的每一行的couln进行排序,那么你可以先对它进行排序。
for(Data[] data : datas){
Arrays.sort(data, new Comparator<Data>() {
@Override
public int compare(final Data data1, final Data data2) {
final String name1 = data1.name;
final String name2 = data2.name;
return name1.compareTo(name2);
}
});
}
您所拥有的看起来根本不像一个多维数组(好吧,它看起来像一个PHP多维数组,而不是Java多维数组),而是一个对象数组,其中每个对象都有一个"名称"和一个"价格"字段。
在这种情况下,您应该首先创建对象的类。设为Product
:
public class Product implements Comparable<Product> {
private String name;
private BigDecimal price;
public Product(final String name, final BigDecimal price) {
this.name = name;
this.price = price;
}
@Override
public int compareTo(final Product other) {
return name.compareTo(other.name);
}
/* Other methods. */
/* Getters and setters for price and name. */
}
你会注意到这个类实现了Comparable<Product>
,并且有一个方法compareTo
。这意味着可以订购一系列产品。然后,将Product
放入数组中并使用Arrays.sort()方法对其进行排序:
Product[] products = new Product[3];
products[0] = new Product("Sony TV", new BigDecimal("600.00"));
products[1] = new Product("LG TV", new BigDecimal("350.00"));
products[2] = new Product("Samsung TV", new BigDecimal("425.00"));
Arrays.sort(products);
编辑:我错过了您想按任何字段排序的事实。在这种情况下,您需要comparator。每个字段需要一个:
Comparator<Product> nameComparator = new Comparator<Product>() {
@Override
int compare(final Product p1, final Product p2) {
return p1.getName().compareTo(p2.getName());
};
Comparator<Product> priceComparator = new Comparator<Product>() {
@Override
int compare(final Product p1, final Product p2) {
return p1.getPrice().compareTo(p2.getPrice());
};
然后,给你的比较器Array.sort()
方法:
Arrays.sort(products, nameComparator);
/* or */
Arrays.sort(products, priceComparator);