#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 ваш ответ за правильное направление и доброту 🙂