过滤包含<String> android 中重复项的编号数组列表



当我尝试过滤包含重复项的数组列表时,会发生以下情况:

ArrayList的内容:

  1. 奶牛
  2. 绵羊
  3. 兰姆
  4. 鸡肉
  5. 奶牛
  6. 绵羊

当我尝试过滤";牛;例如,我得到的是:

1. Cow 
1. Cow

我的代码:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.itemView.setLongClickable(true);
row = mData.get(position);
index = list.indexOf(row);
holder.myTextView.setText(index + 1 + ". " + row);
}

我想要的输出是:

1. Cow
5. Cow

谢谢你的帮助!

编辑:在您进行编辑并意识到您的需求后,我提出了这个想法。检查此代码,此代码适用于API >= 24:

注意:如果希望值与插入的值保持相同的顺序,请使用LinkedHashMap,否则可以使用HashMap

import java.util.Map;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
public class Main
{
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("Cow");
list.add("Sheep");
list.add("Lamb");
list.add("Cow");
list.add("Chicken");
list.add("Sheep");
Map<String, List<Integer>> indexes = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
indexes.computeIfAbsent(list.get(i), c -> new ArrayList<>()).add(i);
}
System.out.println(indexes);
}
}

输出为:

{Sheep=[1, 5], Chicken=[4], Cow=[0, 3], Lamb=[2]}  

使用LinkedHashMap:对此进行输出

{Cow=[0, 3], Sheep=[1, 5], Lamb=[2], Chicken=[4]}

这将返回列表中位置的索引。

第二版:此为API < 24

Map<String, List<Integer>> indexes2 = new HashMap<>();
for (int i = 0; i < list.size(); ++i) {
String key = list.get(i);
if (indexes2.get(key) == null) {
List<Integer> list1 = new ArrayList<Integer>();
list1.add(i);
indexes2.put(key, list1);
} else {
List<Integer> list2 = indexes2.get(key);
list2.add(i);
indexes2.put(key, list2);
}
}
System.out.println(indexes2);

该输出:

{Sheep=[1, 5], Cow=[0, 3], Chicken=[4], Lamb=[2]}  

第一个答案:用于筛选值,以便删除重复项。

要做到这一点,你可以像这样使用HashSetLinkedHashSet

ArrayList<String> list_with_duplicate_items = new ArrayList<String>();
list_with_duplicate_items.add("Cow");
list_with_duplicate_items.add("Sheep");
list_with_duplicate_items.add("Lamb");
list_with_duplicate_items.add("Chicken");
list_with_duplicate_items.add("Cow");
list_with_duplicate_items.add("Sheep");
HashSet<String> filter = new HashSet(list_with_duplicate_items);
ArrayList<String> new_list = new ArrayList<String>(filter); //or just add to your first ArrayList like list_with_duplicate_items = new ArrayList<String>(filter);