2017-05-21 14 views
1

Objectの内部の属性に応じて、順序付きArrayListにObjectを追加する必要があります。私はオブジェクトを追加するために.addメソッドを使用する方法を知っていますが、compareTo()メソッドを使用して適切な場所を検索する方法はわかりません。また、オブジェクトに特定のStringが含まれていても、ArrayListからObjectを削除する必要がありますが、ArrayListからObject属性にアクセスする方法がわかりません。Arraylistの追加と削除

リアルターオブジェクト

/** 
* Constructor for Realtor object using parameter 
* @param readData - array of data from line 
*/ 
public Realtor(String[]readData){ 
    licenseNumber = readData[2]; 
    firstName = readData[3]; 
    lastName = readData[4]; 
    phoneNumber = readData[5]; 
    commission = Double.parseDouble(readData[6]); 
} 

RealtorLogImpl

public class RealtorLogImpl { 

    private ArrayList<Realtor> realtorList; 

    /** 
    * Add Realtor object to ordered list 
    * @param obj - Realtor object 
    */ 
    public void add(Realtor obj){ 

     //needs to be added into correct place depending on Realtor licenseNumber 
     realtorList.add(obj); 
    } 

    /** 
    * Delete Realtor object from list if license matches 
    * and return true if successful 
    * @param license 
    * @return 
    */ 
    public boolean remove (String license){ 
     //need to remove Realtor with specific licenseNumber and return true if successful 
    } 
+0

リスト list = new ArrayList <>(); 'if(list.get(13).length()== 42){...}' –

+0

オブジェクトのタイプとは何ですか?リストに?文字通り型が 'Object'の場合、要素が文字列を「含む」とはどういう意味ですか? –

+1

まず、Objectは "特定の文字列"を持つ '.equals()'を実装していますか?もしそうなら、 '.remove(object)'が動作します。それ以外の場合は、Iteratorを使用してObjectを取得し、標準メソッドを使用して値を取得して比較する必要があります。次に、本当にArrayListが必要ですか([ソートされたリストがない理由](http://stackoverflow.com/questions/8725387/why-is-there-no-sortedlist-in-java))。最適なアプローチは、適切なコンパレータを追加してソートするだけです。 – KevinO

答えて

1

私はあなたがこれらの事のいくつかはそう心の中でそれを維持するJava 7に実装されていないJavaの8を使用していると仮定しています。

最初にアイテムを削除するには、アライリストのremoveif()methodを使用することをおすすめします。これはラムダ式をとります。これはx -> x.getString().equals("someString")のようなものです。

第2に、オブジェクトを配列に追加した後、配列を後で追加することができます。あなたはそれを並べ替えるコンパレータを書くだけでいいです。

1

ここにいくつかの基本的なコードがあります。私はここにコンパイラがないので、小さなエラーや誤字を見つけるかもしれません。

独自の注文リストを管理する代わりに、より優れたクラスがあると確信しています。

public bool add(Realtor obj) { 
    int idx = 0; 
    for (Realtor s : realtorList) { 
     if (s.licenseNumber.equals(item.licenseNumber)) { 
      return false; // Already there 
     } 
     if (s.licenseNumber.compareTo(item.licenseNumber) > 0) { 
      orderedList.add(idx, item); 
      return true; // Inserted 
     } 
     idx++; 
    } 
    orderedList.add(item); 
    return true; // Appended 
} 

を削除するには:

public bool deleteItem(String license) { 
    int idx = 0; 
    for (Realtor s : realtorList) { 
     if (s.licenseNumber.equals(license)) { 
      realtorList.remove(idx); 
      return true; // Removed 
     } 
    } 
    return false; // Not found 
} 
+0

あなたは正しい – user3429660

1

をあなたの質問次のスニペット(Javaの8を必要とする)をチェックし、あなたの要求に適応答えるために:

public static void main(String[] args) { 

    final List<String> list = new ArrayList<>(); 
    list.add("Element 1"); 
    list.add("Element 2"); 
    list.add("Element 3"); 

    /* 
    * Insert at a specific position (add "Element 2.5" between "Element 2" and "Element 3") 
    */ 
    Optional<String> elementToInsertAfter = list.stream().filter(element -> element.equals("Element 2")).findFirst(); 
    if(elementToInsertAfter.isPresent()) { 
     list.set(list.indexOf(elementToInsertAfter.get()) + 1, "Element 2.5"); 
    } 

    /* 
    * Remove a particular element (in this case where name equals "Element 2") 
    */ 
    list.removeIf(element -> element.equals("Element 2")); 
} 

を挿入するには

#add(element)はリストに要素を追加するだけです。 ArrayListの場合、最後に追加されます。あなたは#set(index,element)


を使用する必要がある特定の位置にしかし、その代わりに、手動で特定の位置にあなたの要素を挿入する要素を挿入したい場合、あなたはおそらく代わりにコンパレータを使用する必要があります。 java.util.List.sort(Comparator<? super E> e)

関連する問題