Java — поиск позиции строки в списке объектов хранения

#java #android #arraylist #hashmap #linkedhashmap

#java #Android #arraylist #hashmap #linkedhashmap

Вопрос:

Я думаю, название этого вопроса говорит само за себя или ничего не говорит… После нескольких часов поиска в Google, попыток и изобретения Java я решил спросить вас.

У меня есть этот класс хранилища:

 class AppInfo implements Comparable<AppInfo > {
        private String appname = "";
        private String pname = "";
        private String versionName = "";
        //private int versionCode = 0;
        private Drawable icon;
        private String appdir = "";
        private String appSize = "";

        @Override
        public int compareTo(AppInfo other) {
            int compareAppsName = appname.compareToIgnoreCase(other.appname);

            return compareAppsName;
        }

    }
  

Я делаю то, что делаю, и в итоге получаю список, заполненный объектами.
Все работает отлично, ListView заполняется правильными данными…

Теперь я хочу выполнить поиск строки (определенного pname) и посмотреть, существует ли она в списке, и если да, то какова ее позиция в списке (ее индекс).

Пытался создать другой список только с нужными мне данными .. пробовал списки, хэш-карты, LinkedHashMap, 2-мерные массивы / ArrayList … ничего не помогло… Также пытался выполнить итерацию списка, но не смог понять, как обрабатывать полученные элементы.

Надеюсь, я понимаю, и это даже возможно.

Раскрытие информации: Пожалуйста, потерпите меня, я вроде как новичок в Java.

Комментарии:

1. «Пожалуйста, разделись со мной» — нет, спасибо 🙂

2. @Stephen C LOL извините за это. Честная ошибка, а не приглашение 😉

Ответ №1:

Я не совсем уверен, что понимаю ваш вопрос, но если вы хотите найти индексы элементов списка с заданным значением pname, вы можете сделать что-то вроде этого:

 List<Integer> indices = new ArrayList<Integer>();
for (int i = 0; i < list.size(); i  ) {
    String panme = list.get(i).getPname();
    if (pname != null amp;amp; pname.equals(expectedPname));
        indices.add(i);
    }
}
  

Я только что перечитал ваш вопрос, и похоже, вы ожидаете, что индекс появится только один раз. Извините за путаницу. Для этого вы можете использовать ту же идею без дополнительного списка:

 int matchingIndex = -1;
for (int i = 0; i < list.size(); i  ) {
    String pname = list.get(i).getPname();
    if (pname != null amp;amp; pname.equals(expectedPname));
        matchingIndex = i;
        break;
    }
}
  

Комментарии:

1. Принято еще до того, как я увидел обновление… Отлично! Спасибо 🙂

2. Не проблема; Я рад, что это помогло.

Ответ №2:

Если вы просто хотите проверить строку pname, вы можете добавить метод получения в свой класс AppInfo, например

   public String getPname(){
    return pname ;
  }
  

затем, когда вы выполняете итерацию по своему списку, вы можете вызвать .getPname, чтобы извлечь строку в заданной позиции в списке.

m

Комментарии:

1. Спасибо, но у меня нет заданной позиции… позиция (индекс) — это то, что я ищу… (в случае, если pname, который у меня есть, существует в списке<AppInfo>

2. хорошо, метод getter поможет вам определить, существует ли он в списке. вам нужно самостоятельно перебирать список и проверять каждую запись. Вы получите позицию из своей переменной итератора.

3. Спасибо, 1 ваш ответ за правильное направление и доброту 🙂