3 回答
TA贡献1873条经验 获得超9个赞
使用name产品的作为标识符是一个不好的方法。此外,假设您在 2 个产品具有相同名称时添加产品的尺寸。那么当产品的尺寸和名称相同时,你会怎么做?每个产品都需要有一个 id。
但是,要回答您的问题,您的问题是您只需要一个循环就使用了 2 个循环。只需使用 if 语句来检查两个产品是否在一个 for 循环中具有相同的名称。
for (int k = 0; k < items.length(); k++) {
if(k == items.length() - 1{
//Last Entry in for loop, don't add anything here or you'll get a null pointer exception
}
else{
if(items[k].productName.equals(items[k+1].productName){
//2 Products have same name! Do your stuff.
}
}
}
你从来没有指定什么item是items[].productName恭敬地改变以适应你的代码。
TA贡献1777条经验 获得超10个赞
改变你的方法。
首先按名称对它们进行分组(
Map<String, List<Item>>
例如)然后,对于映射中的每个条目,确定列表的大小是否 >1。如果是这样,请将额外信息添加到该列表的每个项目中。
然后,迭代所有条目和所有列表,并将它们放回一个大列表中。
TA贡献1719条经验 获得超6个赞
标记!由于buttons.add(new Button(items.getString(k); 在外部循环中,必须发生重复。至少如果你将该行放在else-clause中,它就不会出现。
实际上在这里,如果您不介意内存,我建议使用 HashMap() 将 items.getString(k) 对存储到 items.getJSONObject(k).getString("size") 的列表中。
然后你通过集合去创建这个哈希图:
for(int k = 0;....){
String key = items.getString(k);
if(map.contains(key){
map.get(key).add(items.getJSONObject(k));
else {
List<?> list = new ArrayList()
list.add(items.getJSONObject(k));
map.put(key, list);
}
}
map.entrySet().stream().map(stringListEntry -> {
if (stringListEntry.getValue().size() == 1) {
return new Button(stringListEntry.getKey());
} else {
return stringListEntry.getValue().stream().map(size ->
new Button(stringListEntry.getKey() + " Größe " + size));
}
}).collect(Collectors.toList());
添加回答
举报