java - 检查 Arraylist 中字符串是否存在

标签 java android arrays arraylist

我有一个代码,用于检查另一个 arraylist 中是否存在 arraylist 元素,如果找到,则将此元素添加到新的 arraylist 中。 (某种过滤)。

ArrayList 名称:

checking elements arraylist: CoreSite.
Reference ArrayList: SpinnerSelectionArrayList. (received from multichoice spinner)
New ArrayList: MCoreSite.

问题是我尝试的所有可能方法都只是将元素与引用列表的第一个元素进行比较!如果匹配则算。如果没有,它不会检查引用数组列表的第二个元素..并且我找不到wwhy?!

我使用了 contains(),并且我也尝试计数并检查计数的结果。

编辑:已解决,微调器结果在每个逗号后返回额外的空格,这就是为什么只有第一个元素匹配:) ..非常感谢

代码:

ReaderGo.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
           SpinnerSelectionString = multiSpinner.getSpinnerText();
           if(SpinnerSelectionString == null){
               Toast.makeText(getApplicationContext(), "Select Core Sites First", Toast.LENGTH_LONG).show();
           }
           else {
               SpinnerSelectionString = SpinnerSelectionString.replaceAll(",", "\",\"");
               SpinnerSelectionString = "[\"" + SpinnerSelectionString + "\"]";


               try {
                   JSONArray jsonArray = new JSONArray(SpinnerSelectionString);
                   SpinnerSelectionStringArray = new String[jsonArray.length()];
                   for (int i = 0; i < jsonArray.length(); i++) {
                       SpinnerSelectionStringArray[i] = jsonArray.getString(i);
                   }
               } catch (JSONException e) {
                   e.printStackTrace();
               }

               Collections.addAll(SpinnerSelectionArrayList, SpinnerSelectionStringArray);

               MCoreSite.clear();

               for (int i = 0; i < CoreSite.size(); i = i + 1) {
                   int count = Collections.frequency(SpinnerSelectionArrayList, CoreSite.get(i));
                   if (count!=0) {
                       MCoreSite.add(CoreSite.get(i));
                   }
               }
               Toast.makeText(getApplicationContext(), SpinnerSelectionArrayList.toString(), Toast.LENGTH_LONG).show();
               Toast.makeText(getApplicationContext(), CoreSite.toString(), Toast.LENGTH_LONG).show();
               Toast.makeText(getApplicationContext(), MCoreSite.toString(), Toast.LENGTH_LONG).show();

           }
       }

    });

以下是三个数组的 toast 屏幕截图:

元素数组:

enter image description here

引用数组: enter image description here

结果列表: enter image description here

最佳答案

尝试下面的代码:

ArrayList<String> result = new ArrayList();
for(int i = 0; i < firstList.size(); i++) {
    String item = firstList.get(i);
    if(secondList.contains(item)) {
        result.add(item);
    }
}

结果是第一个 List 和第二个列表中存在的元素列表。如果我理解正确的话,这就是你想要的。

教育事实 - 这会起作用,因为列表使用 equals() 来检查两个元素是否相同,而不是 ==。因此,具有相同内容的两个不同String将被视为公共(public)元素:-)

关于java - 检查 Arraylist 中字符串是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37542699/

相关文章:

java - 我需要在 PrettyFaces 中为此制作自定义正则表达式模式吗

java - JFreeChart中如何处理SpiderWebPlot?

java - 在 Java 中将 Base64 字符串转换为字节值字符串

android - 卸载应用程序不会触发服务中的 onDestroy

android - 自定义EditText垂直对齐方式

PHP:将数组相加

java - 使用 Hibernate 的问题 - 未找到 JDBC 驱动程序类 : com. mysql.jdbc.Driver

android - 约束布局中的编辑文本滚动条问题

C - 如何将数字移动到矩阵中的不同位置

javascript - 为什么 Array .filter 方法返回空数组?