Java 按二维对二维数组排序

Java 按二维对二维数组排序,java,android,multidimensional-array,Java,Android,Multidimensional Array,我需要根据物品的价格对它们进行分类 每个项目的价格都存储在一个JSON数组中 我已经创建了一个二维数组来存储名称和价格 像这样的 String [][] priceArray = new String [itemArray.length()] [2]; for(int i = 0; i < itemArray.length(); i++) { //put the item name in the first dimension pr

我需要根据物品的价格对它们进行分类

每个项目的价格都存储在一个JSON数组中

我已经创建了一个二维数组来存储名称和价格

像这样的

    String [][] priceArray = new String [itemArray.length()] [2];

    for(int i = 0; i < itemArray.length(); i++)
    {
        //put the item name in the first dimension
        priceArray[i][0] = itemArray.getJSONObject(i).getString("name");

        //put the item price in the second dimension        
        priceArray[i][1] = itemArray.getJSONObject(i).getString("baseprice");       
    }

    //DEBUG TO SEE THE RESULTS
    for(int i = 0; i < priceArray.length; i++)
    {
        Log.i("Item name : Item Price", priceArray[i][0] + " : " + priceArray[i][1]);               
    }
String[][]priceArray=新字符串[itemArray.length()][2];
对于(int i=0;i
这个很好用。。。但是如何在第二维度中按价格对数组进行排序


这是最好的方法吗?

我建议您创建自己的实体价格。并在循环中创建具有“name”和“baseprice”值的价格实体列表。然后,您可以使用
和您自己的比较器,您可以在其中指定比较价格对象的方式。

更好的方法是:利用OO编程,首先,创建一个类项以包含名称和价格:

class Item {
    String name;
    BigDecimal price;

    public String toString() { return "ITEM: {name:" + name + ", price: " + price + "}" }
}
然后创建项目列表而不是二维数组:

List<Item> items = new ArrayList<Item>();

for(int i = 0; i < itemArray.length(); i++)
{
    Item item = new Item();
    item.name = itemArray.getJSONObject(i).getString("name");
    item.price = new BigDecimal(itemArray.getJSONObject(i).getString("baseprice"));
    items.add(item);
}
List items=new ArrayList();
对于(int i=0;i
最后,如果需要,您可以按名称订购:

// Sort by name
Collections.sort(items, new Comparator<Item>() {

    @Override
    public int compare(Item o1, Item o2) {
        return o1.name.compareTo(o2.name);
    }

});

// at this point, items will be ordered by name
//按名称排序
Collections.sort(items,newcomparator(){
@凌驾
公共整数比较(项目o1、项目o2){
返回o1.name.compareTo(o2.name);
}
});
//此时,项目将按名称排序
或者,如果您想按价格订购:

// Sort by price
Collections.sort(items, new Comparator<Item>() {

    @Override
    public int compare(Item o1, Item o2) {
        return o1.price.compareTo(o2.price);
    }
});

// at this point, items will be ordered by price
//按价格排序
Collections.sort(items,newcomparator(){
@凌驾
公共整数比较(项目o1、项目o2){
返回o1.价格比(o2.价格);
}
});
//此时,项目将按价格订购
当然,我遗漏了一些小问题,比如使用getter和setter,而不是直接访问
项的字段,但是我的目的是展示这个想法。

看来你已经加入了。尽管如此,在任意列上对二维数组进行排序还是相对容易的。只需使用自定义比较器。(下面的代码段中省略了检查列是否存在的错误。)

Arrays.sort(priceArray,新的比较器{
最终int sortColumn=1;
@凌驾
公共整数比较(字符串[]左,字符串右){
返回左[sortColumn]。比较(右[sortColumn]);
}
});
您可以试试这个

 int[][] array2D = {{1,1},{3,21},{5,8},{10,8}};

    Arrays.sort(array2D, new Comparator<int[]>() {
        public int compare(int[] first, int[] second) {
            return first[1] - second[1];
        }
    });
int[]array2D={{1,1},{3,21},{5,8},{10,8};
sort(array2D,新的比较器(){
公共整数比较(int[]第一,int[]第二){
返回第一个[1]-第二个[1];
}
});

为什么要使用android标签?你意识到添加不相关的标签会导致人们忽略你的帖子吗?请查看这些链接以获取相关问题@Majid L它实际上是针对android应用程序的…我以后会更清楚地说明这一点。谢谢,但我不确定我是否完全理解,你能提供一个代码示例吗?我确实尝试过这一点…但当我打印测试结果时,我得到:“{packagename}.ItemList$Item@41f6ba68“我更新了我的答案,我在
项中添加了
toString()
,所以当你使用
System.out.println()
时,它会打印出一个更友好的结果。我已经知道我现在做错了什么……它现在按照我希望的方式工作。谢谢
 int[][] array2D = {{1,1},{3,21},{5,8},{10,8}};

    Arrays.sort(array2D, new Comparator<int[]>() {
        public int compare(int[] first, int[] second) {
            return first[1] - second[1];
        }
    });