按内部数组的一个字段对多维数组排序



如何按内部数组的字段之一排序多维数组?

在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);

相关内容

  • 没有找到相关文章

最新更新