我正在尝试实现一种逻辑,其中数组包含许多名称不同的项目(产品)。但是,产品名称可能相同,因此我需要添加一个附加属性(大小)。我想这是一个简单的任务,但是我在当前的方法中得到了重复:
for (int k = 0; k < items.length(); k++) {
for (int l = k + 1; l < items.length(); l++) {
if(items.getString(k).equals(items.getString(l))) {
buttons.add(new Button(items.getString(k) + " Größe "
+ items.getJSONObject(k).getString("size");
buttons.add(new Button(items.getString(l) + " Größe "
+ items.getJSONObject(l).getString("size");
}
}
buttons.add(new Button(items.getString(k);
}
我对项目进行了一些修改,以使其更易于阅读。我现在面临的问题是,添加了两个附加大小的元素现在也再次附加了没有大小的元素。那么一旦添加了这两个元素,该如何跳过呢?
答案 0 :(得分:0)
改变方法。
../../uploads/
)答案 1 :(得分:0)
似乎您要添加按钮的次数是三次,而不是两次。
因为您要遍历两个嵌套循环。您无需在嵌套循环中为k
索引添加:
我认为您需要删除此行:
buttons.add(new Button(items.getString(k) + " Größe " + items.getJSONObject(k).getString("size");
您还可以设置setWidth()
和setHeight()
之类的按钮的大小
最后应该如下所示:
for (int k = 0; k < items.length(); k++) {
for (int l = k + 1; l < items.length(); l++) {
if(items.getString(k).equals(items.getString())) {
Button button1 = new Button(items.getString(l) + " Größe " + items.getJSONObject(l).getString("size");
button1.setWidth(200);
button1.setHeight(100);
buttons.add(button1);
}
}
Button button2 = new Button(items.getString(k);
button2.setWidth(200);
button2.setHeight(100);
buttons.add(button2);
}
答案 2 :(得分:0)
将产品的name
用作标识符是一种不好的方法。另外,假设您在两个产品具有相同名称时确实增加了产品尺寸。那么,当产品具有相同的尺寸和名称时,该怎么办?每个产品都需要有一个ID。
但是,要回答您的问题,您的问题是,当您只需要一个循环时,您正在使用2个for循环。只需使用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
以适应您的代码。
答案 3 :(得分:0)
马克! 由于外部循环中的button.add(new Button(items.getString(k);),因此必须发生重复。 至少如果您将该行放在else-clause中,它将不会显示。
实际上,在这里,如果您不介意内存,我建议您使用HashMap()存储对项。getString(k)到项列表。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());