2016-04-11 8 views
-1

ItemsというArrayListがあります。ArrayList内のオブジェクトを見つけて削除します

私はArrayListをループし、名前、価格を検索します。名前&の価格がユーザーの入力と一致し、価格が以前よりも高い場合は、古いオブジェクト(名前と価格を含む)を削除してから、新しい項目を(入力から)ArrayListに追加します。

基本的に私のArrayListが含まれている場合:(ミルク、15)牛乳だっ以下

と入力し、19

が新しいArrayListのが今含まれます(ミルク、19)が

コメントから

編集:どのように私を行います選択したオブジェクトを宣言して削除しますか?

System.out.println("Item name: "); 

String name = input.nextLine(); 

System.out.println("Price: "); 

int price = input.nextInt(); 

Item newItem = (Name, price); 



for (Items i: itemList) { 

    if(i.getName().contains(name) && i.getPrice()==price)) { 


     // here declare object which contains name & price 

     //Not sure if below would work but something along these lines 

     if(price > object.getPrice()) { 

      itemList.remove(object above) 

      //and then 

      itemList.add(newItem) 
     } 
    } 
} 
+0

コードを実行しようとしましたか? – OldProgrammer

+0

'Map 'が必要で、 'ArrayList'ではないようです。 –

+0

@OldProgrammerはい、しかし、私は選択されたオブジェクトを宣言し、それを削除するのに役立つ必要があります。 – Ilja

答えて

1

ArrayListを反復して変更することはできません。どの項目を削除して削除するのかを覚えておく必要があります。これを行うには

List<Item> itemToRemove = new LinkedList<Item>(); 

for (Items i: itemList) { 

    if(i.getName().contains(name) && i.getPrice() == price)) { 

     itemToRemove.add(i); 
    } 
} 

itemList.removeAll(itemToRemove); 
+0

ありがとう、素晴らしい解決策! – Ilja

2

一つの合理的にきちんとした方法は、removeIfメソッドを使用して、何が削除された場合、新たな項目を追加することです。何が削除されたtrue場合removeIfリターン:

if(items.removeIf(item -> item.getName().equals(name) && item.getPrice() > price)) 
    items.add(new Item(name, price)); 

注:このコードは、Java 8

+0

ラムダ。良い選択 – Logan

0

は、私はあなたの代わりにMap<String, Integer>を使用する必要があることを言うだろうが必要です。

Map<String, Integer> values = new HashMap<>(); 

//example logic of utilizing the map to replace values and store the highest 
public int addBet(String name, int amount) { 
    //in Java 7 or less: 
    Integer old = values.get(name); //get the old value 
    if (old == null) { 
     old = amount; //if there was no old value, we'll use the new one 
    } else { 
     old = Math.max(old, amount); //if there was a value, use the highest 
    } 
    return values.put(name, old); //set the amount 
    //In Java 8, we have #compute for this instead: 
    return values.compute(name, old -> old == null ? amount : Math.max(old, amount)); 
} 

だから、この使用して、我々はマップの使用法を示し#addBetを経由して最高値を、見ることができる:マップ/辞書は、/ etcはそれが事のまさにこのタイプのためのものだ、キー/値のペアを格納し、何かであります:

addBet("Bob", 10); //returns 10 
addBet("Foo", 14); //14 
addBet("Bob", 22); //22 
addBet("Bob", 15); //22 
values.get("Bob"); //22 
values.get("Foo"); //14 

さらに、これは毎回リスト全体を反復するよりはるかに効率的です。

関連する問題