Untuk aplikasi Android, saya memiliki fungsi berikut
private ArrayList<String> _categories; // eg ["horses","camels"[,etc]]
private int getCategoryPos(String category) {
for(int i = 0; i < this._categories.size(); ++i) {
if(this._categories.get(i) == category) return i;
}
return -1;
}
Apakah itu cara "terbaik" untuk menulis fungsi untuk mendapatkan posisi elemen? Atau apakah ada fungsi asli shmancy mewah di java yang harus saya manfaatkan?
==
akan menghasilkan hasil yang salah dalam banyak kasus.==
... itu bukan perbandingan yang tepat ;-)String.equals
lebih seperti apa yang===
mungkin ada dalam bahasa seperti JavaScript? misalnya. memeriksa nilai DAN jenis?==
Adalah identitas objek dan artinya "adalah objek yang sama" . (Tampilan ini berlaku untuk nilai primitif serta jenis referensi, jika Anda menganggap hanya ada satu angka dengan nilai 42 atau char 'x', dll).Object.equals
adalah metode virtual yang didefinisikan untuk semua instance objek dan itu berarti "memiliki nilai yang sama" , karena semua jenis kelas memperluas Object, dan harus digunakan untuk semua pengujian persamaan objek . Ada banyak pertanyaan di sampul==
vsObject.equals
dan ini adalah konsep yang sangat penting untuk dipahami! Sebagai contoh, ini adalah palsu:"hello" == new String("hello")
! Doh!Jawaban:
ArrayList
memilikiindexOf()
metode . Periksa API untuk mengetahui lebih lanjut, tetapi begini cara kerjanya:private ArrayList<String> _categories; // Initialize all this stuff private int getCategoryPos(String category) { return _categories.indexOf(category); }
indexOf()
akan mengembalikan persis seperti yang dikembalikan metode Anda, dengan cepat.sumber
==
saat indexOf menggunakanequals()
.ArrayList<String> alphabetList = new ArrayList<String>(); alphabetList.add("A"); // 0 index alphabetList.add("B"); // 1 index alphabetList.add("C"); // 2 index alphabetList.add("D"); // 3 index alphabetList.add("E"); // 4 index alphabetList.add("F"); // 5 index alphabetList.add("G"); // 6 index alphabetList.add("H"); // 7 index alphabetList.add("I"); // 8 index int position = -1; position = alphabetList.indexOf("H"); if (position == -1) { Log.e(TAG, "Object not found in List"); } else { Log.i(TAG, "" + position); }
Output: Indeks Daftar: 7
Jika Anda mengirimkan H maka akan mengembalikan 7 , jika Anda melewati J akan mengembalikan -1 seperti yang kami tentukan nilai default menjadi -1.
Selesai
sumber
Jika Anda
List
diurutkan dan memiliki akses acak yang baik (sepertiArrayList
halnya), Anda harus memeriksanyaCollections.binarySearch
. Jika tidak, Anda harus menggunakanList.indexOf
, seperti yang ditunjukkan orang lain.Tapi algoritme Anda bagus, fwiw (selain yang
==
ditunjukkan oleh yang lain).sumber
Memang ada fungsi asli shmancy mewah di java yang harus Anda manfaatkan.
ArrayList memiliki metode instance yang disebut
indexOf(Object o)
(http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html)
Anda dapat mengaktifkannya
_categories
sebagai berikut:_categories.indexOf("camels")
Saya tidak memiliki pengalaman dengan pemrograman untuk Android - tetapi ini akan bekerja untuk aplikasi Java standar.
Semoga berhasil.
sumber
Java API menetapkan dua metode yang dapat Anda gunakan:
indexOf(Object obj)
danlastIndexOf(Object obj)
. Yang pertama mengembalikan indeks elemen jika ditemukan, -1 sebaliknya. Yang kedua mengembalikan indeks terakhir, itu seperti mencari daftar mundur.sumber
Cara terbaik untuk menemukan posisi item dalam daftar adalah dengan menggunakan antarmuka Koleksi,
Misalnya,
List<Integer> sampleList = Arrays.asList(10,45,56,35,6,7); Collections.binarySearch(sampleList, 56);
Hasil: 2
sumber
Gunakan metode indexOf () untuk menemukan kemunculan pertama elemen dalam koleksi.
sumber
solusi terbaik disini
class Category(var Id: Int,var Name: String) arrayList is Category list val selectedPositon=arrayList.map { x->x.Id }.indexOf(Category_Id) spinner_update_categories.setSelection(selectedPositon)
sumber