Java - найти позицию строки в списке объектов хранения - PullRequest
1 голос
/ 02 октября 2011

Я думаю, название этого вопроса говорит само за себя или ничего не говорит ... После нескольких часов поиска в 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) и посмотреть, существует ли она в списке и, если она существует, какова ее позиция в списке (ее индекс).

Попытка создания другого списка только с данными, которые мне нужны .. пробовал списки, HashMaps, LinkedHashMap, 2-мерные массивы / arrayList ... ничего не получилось ... Также попытался перебрать список, но не смог понять, как обращаться с полученными элементами.

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

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

Ответы [ 2 ]

5 голосов
/ 02 октября 2011

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

List<Integer> indices = new ArrayList<Integer>();
for (int i = 0; i < list.size(); i++) {
    String panme = list.get(i).getPname();
    if (pname != null && 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 && pname.equals(expectedPname));
        matchingIndex = i;
        break;
    }
}
2 голосов
/ 02 октября 2011

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

  public String getPname(){
    return pname ;
  }

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

м

...