2016-07-21 11 views
1

カスタム配列リストのインデックスを検索したい。 これは私のカスタム配列リストである:カスタム配列リストの配列のインデックスを見つける方法...?

private ArrayList<UserData> ListItems = new ArrayList<>(); 

UserData list = new UserData("list", "5", R.drawable.email_black, false); 

UserData list1 = new UserData("list1", "3",R.drawable.text_msg, false); 

UserData list2 = new UserData("list2", "2",R.drawable.phone_call, false); 

ListItems.add(list); 
ListItems.add(list1); 
ListItems.add(list2); 

私は以下のようにやってますが、インデックスを取得しておりません。

int m = ListItems.indexOf("list1"); 

UserData obj = ListItems.get(m); 
String name = obj.getName(); 

名前文字列にlist1が必要です。

+0

あなたが持っているだろうlistItems.indexOf 'で' userData'オブジェクトを渡す() '文字列ではありませんインデックスを取得します。 – Geros

+0

どうやって説明できますか? – sunny

+1

これはカスタムリストではないカスタムオブジェクトです。 ListItems.indexOf(list1)を渡さなければなりません。ここでlist1はUserDataオブジェクト(あなたのケースのカスタムオブジェクト)です。 –

答えて

1

イテレータ必要なデータを取得します。 は、以下のようなものを実行します。

for (int i = 0; i < ListItems.size(); i++) { 
     String userListName = ListItems.get(i).getListName(); 
     if(userListName.equals("list1")){ 
      //Do something here 
     }else{ 
      //Nthng to do 
     } 
    } 
1

indexOfは、引数とリストの項目が等しいことに基づいています。それらは存在しないため(UserDataインスタンスともう1つはStringです)、indexOfは使用できません。代わりに、自分でこのロジックを実装する必要があります:

private UserData getUserDataByName(String name) { 
    for (UserData item : listItems) { 
     if (item.getName().equals(name)) { 
      return item; 
     } 
    } 
    // Not found, return null; 
    return null; 
} 
+0

返品アイテムを保管する場所; UserData item = getUserDataByName( "list1"); 文字列名= item.getName(); それは気にしていませんか? – sunny

+0

@ samirはい、うまくいくはずです。慎重にしたい場合は 'item.getName()'を呼び出す前に 'item!= null'をチェックしてください。 – Mureinik

+0

私はそれを追加します。今 – sunny

1

このようなシナリオでは、あなたはまた、HashMapを使用することができます。文字列は、「リスト」だろうどこなど

EX「リスト1」、HashMap<String,UserData>を使用する - ために

map.put("list", list); 
関連する問題