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());
添加回答
舉報