3 回答

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
使用name產(chǎn)品的作為標(biāo)識符是一個(gè)不好的方法。此外,假設(shè)您在 2 個(gè)產(chǎn)品具有相同名稱時(shí)添加產(chǎn)品的尺寸。那么當(dāng)產(chǎn)品的尺寸和名稱相同時(shí),你會怎么做?每個(gè)產(chǎn)品都需要有一個(gè) id。
但是,要回答您的問題,您的問題是您只需要一個(gè)循環(huán)就使用了 2 個(gè)循環(huán)。只需使用 if 語句來檢查兩個(gè)產(chǎn)品是否在一個(gè) for 循環(huán)中具有相同的名稱。
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恭敬地改變以適應(yīng)你的代碼。

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個(gè)贊
改變你的方法。
首先按名稱對它們進(jìn)行分組(
Map<String, List<Item>>
例如)然后,對于映射中的每個(gè)條目,確定列表的大小是否 >1。如果是這樣,請將額外信息添加到該列表的每個(gè)項(xiàng)目中。
然后,迭代所有條目和所有列表,并將它們放回一個(gè)大列表中。

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊
標(biāo)記!由于buttons.add(new Button(items.getString(k); 在外部循環(huán)中,必須發(fā)生重復(fù)。至少如果你將該行放在else-clause中,它就不會出現(xiàn)。
實(shí)際上在這里,如果您不介意內(nèi)存,我建議使用 HashMap() 將 items.getString(k) 對存儲到 items.getJSONObject(k).getString("size") 的列表中。
然后你通過集合去創(chuàng)建這個(gè)哈希圖:
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());
添加回答
舉報(bào)