我有一个ArrayList,它包含diff diff index的重复值。
例如{"Indian","American","Chinese","Australian","Indian","Russian","Indian"}
正如你可以看到价值 - "Indian"
存在于索引 - 0
,4
& 6
。
我需要知道"Indian"
存在的所有这些索引并创建一个arrayList。
这是我的代码:
public void filter(){
categoryArray = Arrays.asList(category);
for(String k : category){
//Log.v("filter", filterTerm);
if(k.equals(filterTerm.toLowerCase()))
{
int p = categoryArray.indexOf(k);
Log.v("index of categArr", ""+p);
String id = Integer.toString(p);
indexes.add(id);
}// end of if
}// end of for
这里我通过获取索引的大小(ArrayList)获得重复发生的次数
但是当我检查数值时。它在所有索引中的一个值,因为在方法中:indexOf()
它总是带来它在数组中找到的第一个值的索引。
因此,如果索引存在重复 - 2
,5
,7
我得到索引的数组大小为3
。
但值为{2,2,2,};
答案 0 :(得分:2)
您需要知道当前所在阵列中的哪个索引,而不是第一个找到它的索引。为了跟踪这一点,请输入
int i = 0;
在循环之前,在循环的结束
i++;
然后变量i
会告诉您在哪里找到了值,因此您可以将i
添加到索引列表中。
答案 1 :(得分:2)
这种情况下,基于索引的for循环比你正在使用的循环增强更合适,因为你需要抓取的是索引。
你可以将所有工作都放在原始数组上,而不是将其转换为列表,我怀疑你是不是要进行不区分大小写的匹配。
public void filter(){
for(int i=0; i<category.length; i++){
if(category[i].equalsIgnoreCase(filterTerm))
{
String id = Integer.toString(i);
indexes.add(id);
}
}
}
如果你有一个ArrayList而不是一个数组,当然类似的代码可以使用,但使用list.get(i)
而不是category[i]
。