0

我有两个列表,即plistbrlistplist有产品表的内容,brlist有品牌表的价格表。我想合并两个列表并创建一个新列表。我尝试了以下代码,但它复制了两个列表的最后一行值。

例如,

列表plist有product1,product2 ,product3和各自的品牌和 brlist 有product1,product2 ,product3有各自的价格price1,price2,price3 。在我的例子中,结果列表有 3 行,所有的值都是相同的product3 --brandname3 --price3 . 帮助我克服这个错误。

代码 :

 Map<String, Object> fields = FastMap.newInstance();
 List<Map<String, Object>> products = FastList.newInstance();

   /* actually plist and brlist has the values and displays all the values i checked */

  iter = plist.iterator();
 while (iter.hasNext())

{
  group = iter.next()

  brlist1.add(brlist.price);


  fields.put("productId",group.productId);
  fields.put("brandName",group.brandName);
  fields.put("price",brlist.price);

 products.add(fields);
}
4

2 回答 2

0

我认为对您来说最简单的解决方案是创建一个新对象,该对象存储您从 plist 和 brlist 中提取的字段。这有点令人困惑,但如果你这样做了,那么你就可以制作一个直接满足你需求的新对象列表,而不是创建一个列表的一部分和另一部分的列表。尽管您之前的解释很清楚,但我很难遵循您的代码,但代码变量对我来说没有多大意义。

另外,我将不得不对其进行研究,但是由于某种原因,您对字段方法的调用对我来说似乎是倒退的,尽管自从我使用地图/Java 以来已经有一段时间了。

于 2013-02-01T12:28:51.437 回答
0

干得好:

new class Product {

private Long productId;
private String brandName;
private Double price;

constructor ...
getters / setters ...

}

然后在你的代码中的某个地方......

Map<Long, Product> products = new HashMap<Long, Product>();

// Not really certain what type of map you got here... but regardless
iter = plist.iterator();
while (iter.hasNext()) {

  // Again, some sort of either object or identifier
  group = iter.next()

  Product p = new Product();
  p.setBrandName(group.getBrandName());
  p.setProductId(group.getProductId());

  products.put(group.productId(), p);

}

iter = brlist.iterator();

while (iter.hasNext()) {

  group = iter.next();

  // Let's assume the both brlist and plist have the same amount of products
  // That way we can grab the value from the map and set the price.
  products.get(group.getProductId()).setPrice(group.getPrice());

}
于 2013-02-01T13:43:49.547 回答