我需要根据价格对商品进行分类。
每个项目的价格都存储在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]);
}
这很好......但是我如何按第二维中的价格对数组进行排序?
这甚至是最好的方法吗?
答案 0 :(得分:1)
我建议你创建自己的实体Price。并在您的循环中创建具有“name”和“baseprice”值的价格实体列表。然后,您可以使用Collections.sort()对列表进行排序 以及您自己的比较器,您可以指定如何比较Price对象。
答案 1 :(得分:1)
好像你在object denial。但是,在任意列上对二维数组进行排序相对容易。只需使用自定义比较器。 (下面的代码段中省略了检查列存在的错误。)
Arrays.sort(priceArray, new Comparator<String[]> {
final int sortColumn = 1;
@Override
public int compare(String[] left, String right) {
return left[sortColumn].compareTo(right[sortColumn]);
}
});
答案 2 :(得分:1)
你可以试试这个
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];
}
});
答案 3 :(得分:0)
更好的方法:利用OO编程,首先,创建一个包含名称和价格的类项目:
class Item {
String name;
BigDecimal price;
public String toString() { return "ITEM: {name:" + name + ", price: " + price + "}" }
}
然后创建一个Items列表而不是一个2D数组:
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);
}
最后,如果您愿意,可以按名称订购:
// 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
或者如果您想按价格订购:
// 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
当然,我错过了一些小问题,比如使用getter和setter而不是直接访问Item
的字段,但目的是表明这个想法。