Java - 在存储对象列表中查找字符串的位置

Lio*_*luz 1 java android arraylist hashmap linkedhashmap

我想这些问题的标题说明了一切,或者什么也没说......经过几个小时的谷歌搜索,尝试和重新发明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;
        }

    }
Run Code Online (Sandbox Code Playgroud)

我做我做的事情,最终我得到一个填充对象的List.一切都很好,ListView填充了正确的数据......

现在我想搜索一个字符串(某个pname)并查看它是否存在于List中,如果存在,它在列表中的位置(它的索引)是什么.

尝试创建另一个列表,只包含我需要的数据..尝试了Lists,HashMaps,LinkedHashMap,2维数组/ arrayList ......没有做到这一点......还尝试迭代列表但无法弄清楚如何处理元素我有.

希望我有所作为,甚至可能.

披露:请耐心等待,我是Java的新人.

小智 5

我不完全确定我理解你的问题,但如果你想找到具有给定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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我只是重读了你的问题,听起来你只希望索引出现一次.对困惑感到抱歉.为此,您可以使用相同的想法,而无需其他列表:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)