коллекциядағы бірінші индексті таңдаңыз

Мен кейде дөңгелекті ойлап тапқанымды сезінемін.

Мен java/jakarta commons/guava /? Жүйесінде қандай да бір пайдалы әдістер бар ма деп ойлаймын, олар коллекцияда тереңірек болады және элементтермен бір нәрсе жасайды (тестілеу, өзгерту, жою).

Мен бұл әдісті жаздым, енді мен мұны жасай алатын бір-ақ сызғыш бар деп ойлаймын.

/**
 * 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
орнына (int i = 0, i үшін (int i = 0, n = list.size (), i ), i ++) ?
қосылды автор Bhesh Gurung, көзі
@Bhesh Бұл өлшем() операциясы қымбат болған жағдайда оңтайландыру сияқты. Бірақ, ол сондай-ақ, тізбектің өлшемі тоқтап тұрғанда бекітілгенін білдіреді, бұл маған қауіпті көрінеді.
қосылды автор Kevin K, көзі
Бұл менің стилім. Мен() әдісіне шақыру қаншалықты қымбат екенін тексермедім.
қосылды автор adfgvx, көзі

2 жауаптар

Guava құрамында Iterables.indexOf бар:

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

Жақсы емес, сөзсіз - және сізге search соңғы жасау керек. Бірақ кем дегенде Java 8-де сіз келесідей нәрсе жаза аласыз:

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

(Немесе кем дегенде біреуі сияқты және кеңейту әдіс синтаксисінде мүмкін ...)

5
қосылды
Өте талғампаз, бір реттік, бірақ әдемі емес. Мен CollectionUtils.find коллекцияларымен ойнап жүрдім, бірақ бұл әдіс индексті бермейді ...
қосылды автор adfgvx, көзі

Guava сізде Iterables.indexOf() , бірақ мен сіздің кодының оқылуын дәлелдейтінін дәлелдей алмас едім:

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
қосылды
Иә ... Java және функционалдық бағдарламалау жақсы ойнайды. Анонимді Функция / Predicate сыныптарын :(
қосылды автор mergeconflict, көзі
TNX функциясы пайдалануға дайын. Гуава өте қуатты, бірақ бұл әлі де көп теру.
қосылды автор adfgvx, көзі