kabi to'plamdagi birinchi indeksni tanlang

Ba'zida g'ildirakni kashf etmoqchiman.

Men java/jakarta commons/guava/da biron-bir foydali usul mavjudmi yoki yo'qmi deb o'ylayman, bu to'plamga chuqurroq kirib, elementlar bilan nimadir qilish (sinov, o'zgartirish, olib tashlash).

Men bu usulni yozdim va endi buni amalga oshirishga imkon beradigan bir layner borligini his qilyapman.

/**
 * Find index of first line that contains search string.
 */
public static int findIdx(List list, String search) {
  for (int i = 0, n = list.size(); i < n; i++)
    if (list.get(i).contains(search))
      return i;
  return -1;
}
3
o'rniga (int i = 0, i (int i = 0, n = list.size (); i ); i ++) ?
qo'shib qo'ydi muallif Bhesh Gurung, manba
@Bhesh Agar hajmi() operatsiyasi qimmat bo'lsa, optimallash kabi ko'rinadi. Ammo, shuningdek, loop qilishda ro'yxatning kattaligi sobit turadi, bu men uchun xavfli ko'rinadi.
qo'shib qo'ydi muallif Kevin K, manba
Bu mening uslubim. Size() usuli chaqiruv qanchalik qimmatligini tekshirmadim.
qo'shib qo'ydi muallif adfgvx, manba

2 javoblar

Guava, Iterables.indexOf -ga ega.

int index = Iterables.indexOf(list, new Predicate {
        @Override public boolean apply(String input) {
            return input.contains(search);
        }
    });

Juda ham yaxshi emas, tan olinsa - va search oxirgi qilishingiz kerak. Lekin hech bo'lmaganda Java 8 bilan siz quyidagi kabi narsalarni yozish imkoniyatiga ega bo'lasiz:

int index = Iterables.indexOf(list, input => input.contains(search));

(Yoki hech bo'lmaganda o'xshash bir narsa va, ehtimol, kengaytmasi metodikasida ...)

5
qo'shib qo'ydi
Juda zarif, bir emas, balki chiroyli. Men aslida CollectionUtils.find commons bilan o'ynashni boshladim, lekin bu usul indeksni bermaydi ...
qo'shib qo'ydi muallif adfgvx, manba

Guava siz istagan narsaga ega Iterables.indexOf() bo'lsa ham, sizning kodingizni yanada o'qiysiz deb ayta olmaysiz:

public static int findIdx(List list, final String search) {
  return Iterables. indexOf(list, new Predicate() {
    public boolean apply(String s) {
      return s.contains(search);
    }
  });
}
2
qo'shib qo'ydi
Ha ... Java va funktsional dasturlash yaxshi ishlamaydi. Anonim Funktsiya / Predicate sinflarni:
qo'shib qo'ydi muallif mergeconflict, manba
TNX funksiyasidan foydalanishga tayyor. Guava juda kuchli, ammo u hali juda ko'p terish.
qo'shib qo'ydi muallif adfgvx, manba