如何在ArrayList中搜索相似性



我有一个字符串的arrayList,我想在Spinner或下拉菜单中显示它,但大多数情况下,我会让字符串重复,我想做的是在arrayList中搜索相似之处,如果找到一个字符串,例如"Hello World"在arrayList上出现7次,删除另一个6,并将7分配给它,以显示它出现了7次,所以我的新字符串将是"Hello world(7(",有人能帮助我如何在下面的代码中实现这一点吗:

for(int i = 0; i < timesCalleddb.getAllTimesCalled(missedCall.getNumber()).size(); i++)
    {
        if(timesCalleddb.getAllTimesCalled(missedCall.getNumber()).get(i) ==
                timesCalleddb.getAllTimesCalled(missedCall.getNumber()).get(i+1))
        {
           //where am guessing the implementation my problem should be
        }
    }

您应该考虑使用映射数据结构,因为您必须存储计数器,否则,哈希集将是完美的:

ArrayList<String> strs = ...;
HashMap<String, Integer> counter = new HashMap<String, Integer>();
for(String s : strs) {
    counter.put(s, counter.get(s) == null ? 1 : counter.get(s) + 1);
}
for(String s : counter.keySet()) {
    System.out.println(s + " (" + counter.get(s) + ")");
}

您可以执行以下操作:

  1. List进行迭代,并生成指示每个String出现多少次的HashMap<String, Integer>
  2. 使用list = new ArrayList<String>(new LinkedHashSet<String>(list));List中删除重复项。使用LinkedHashSet意味着保持了订单
  3. 根据map.get(string)1还是大于1,通过迭代List并添加stringstring + " (" + map.get(string) + ")"来构建新的List

您可以使用此代码根据列表的特定字符串筛选CustomList。如果你想计算出现的次数,你可以在循环中添加一些计数器。

List<MyCustomObject> arrayList = new ArrayList<>();
List<MyCustomObject> result = new ArrayList<>();
Set<String> set = new HashSet<>();
for(MyCustomObject item : arrayList) {
   if(set.add(item.getSomeString()) {
       resultArray.add(item);
   }
}
arrayList.clear();
arrayList.addAll(result);

要从List中删除重复的String,请使用以下命令:

List<String> arrayList = new ArrayList<>();
// Your elements must be added to the arrayList, before progressing to the next step.
Set<String> set = new HashSet<>();
set.addAll(arrayList );
// Code for getting count of each String
int count = 0;
List<Integer> arrayListCount = new ArrayList<>();
for (Iterator<String> it = set.iterator(); it.hasNext(); ) {
    String str = it.next();
    arrayListCount.add(count , 0);
    for(int i = 0; i < arrayList.size(); i++){
        String s = arrayList.get(i);
        if (str.equals(s)) {
            arrayListCount.set(count , arrayListCount.get(count) + 1);
       }                
    }
    count++;
}
// Code for getting count ends here
arrayList.clear();
arrayList.addAll(set);

注意:不会保留List的序列。

希望有帮助!!!

最新更新