我如何通过id订购产品数组

时间:2015-03-17 16:57:44

标签: java arrays

我希望你能帮助我,我正在尝试订购这些数组

int pumpno[] = new int[] { 3, 4, 5, 3, 4, 6};
String desc[] = new String[] {"jam", "chesse", "milk", "water",   "soup","bread"};
int cost[] = new int[] {10, 15, 23, 43, 12, 67};

我想按以下顺序打印:

id   3 
----------
desc jam

cost 10

desc water

cost 43

id   4
----------
desc chesse

cost 15

desc soup

cost 12


id   5 
----------
desc milk

cost 23

id   6
----------
desc bread

cost 63

例如,每个数组在这种情况下具有相同的长度为9,在firts数组中,id的值与id相同,我只想打印一次id的值并打印下面的所有de值相同的身份

我只是想知道如果我用这些

来做同等重要的id
Set<String> set = new HashSet<String>();
for (int i = 0; i < pumpno.length; i++) {
if (set.contains(pumpno[i])) {
    Log.d("Duplicate ", pumpno[i]);
} else {
    set.add(pumpno[i]);
}

但我不知道如何像上面的例子一样打印。如果你可以帮助我,非常感谢

1 个答案:

答案 0 :(得分:0)

您可以使用ID为密钥的HashMapSet<Product>作为值(如果您不希望有重复项或列表,如果您想要产品订购)。您可以在一次迭代中填写它并在另一次迭代中打印。

产品将是具有描述和价格的数据结构。

Map<int, Set<Product>> productsById = new HashMap<>();
for (int i = 0; i < pumpno.length; i++) {
    if (productsById.containsKey(pumpno[i])) {
      //add product to existing set
      productsById.get(pumpno[i]).add(new Product(desc[i], cost[i]));
    } else {
        //create set since this is first time id is shown
        Set<Product> set = new HashSet<Product>();
        set.add(new Product(desc[i], cost[i]);
        productsById.put(pumpno[i], set);
    }
}

String newLine = System.getProperty("line.separator"); 
for (int id : productsById.keySet()){
   System.out.println("id " + id + newLine);
   for (Product product : productsById.get(id)){
     System.out.println("description" + product.getDescription() + newLine);
     System.out.println("cost" + product.getCost() + newLine);   
   }
}

希望我没有犯错,因为我在markdown中键入了这个,但这是逻辑。