亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在數組中查找等于并添加附加信息

在數組中查找等于并添加附加信息

Qyouu 2022-05-21 18:33:40
我正在嘗試實現一個邏輯,其中一個數組包含許多名稱不同的項目(產品)。盡管如此,產品可能具有相同的名稱,因此我需要添加一個附加屬性(大小)。我想這是一個簡單的任務,但我目前的方法是重復的: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);}我對這些項目進行了一些調整,以使其更易于閱讀。我現在面臨的問題是,附加了大小的兩個添加元素現在也再次附加了沒有大小的元素。那么,一旦我添加了這兩個元素,我該如何跳過它們呢?
查看完整描述

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恭敬地改變以適應你的代碼。


查看完整回答
反對 回復 2022-05-21
?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

改變你的方法。

  • 首先按名稱對它們進行分組(Map<String, List<Item>>例如)

  • 然后,對于映射中的每個條目,確定列表的大小是否 >1。如果是這樣,請將額外信息添加到該列表的每個項目中。

  • 然后,迭代所有條目和所有列表,并將它們放回一個大列表中。


查看完整回答
反對 回復 2022-05-21
?
慕俠2389804

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());


查看完整回答
反對 回復 2022-05-21
  • 3 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號