2016-05-31 4 views
0

У меня есть код, проверяющий существование элементов arraylist в другом arraylist, если он добавит этот элемент в новый arraylist. (вид фильтрации).проверка существования строки в Arraylist

ArrayLists Имена:

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

проблема все возможные пути я пытался сравнивать только элемент первого элемента списка ссылок! если совпадение соответствует. если нет, он не проверяет со вторым элементом ссылочного arraylist .. и я не могу найти wwhy ?!

Я использовал содержит(), и я также пытаюсь подсчитать и проверить результат подсчета.

Edit: Решено, результат вертушка возвращается дополнительное пространство после каждой запятой, поэтому только первый элемент согласования :) .. большое спасибо

код:

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(); 

      } 
     } 

    }); 

ниже являются тостов скриншоты для трех массивов:

Элементы массива:

enter image description here

Referrence Массив: enter image description here

Список Результат: enter image description here

+0

@SheriffSaidElahi у вас есть два arraylist, и если какой-либо общий элемент найден между ними, вы должны добавить этот элемент в новый arraylist, я понял вас правильно или не??? – Dhiraj

+0

@Dhiraj, да, вы правы. Я сравниваю каждый элемент в CoreSite с ссылочным списком под названием SpinnerSelectionArrayList. если он найден, я добавляю его в новый список. (другими словами, я фильтрую список CoreSite на основе выбора в списке ссылок). –

+0

@ M.Suurland, уверенный список CoreSite (мои элементы) имеют дубликаты .. почему это должно привести к проблеме? –

ответ

1

Попробуйте следующий код:

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(), чтобы проверить, одинаковы ли два элемента, а не ==. Поэтому два разных Strings с таким же содержимым будут считаться общим элементом :-)

+0

спасибо, но у меня все еще такая же проблема, она сравнивается только с первым элементом в «SecondList» .. проверьте изображения, которые я приложил. –

+0

Решенный, результат spinner возвращал дополнительное пространство после каждой запятой, поэтому только первый элемент соответствует :) .. большое спасибо –

Смежные вопросы