ArrayList содержит не обнаружение того, что он должен

У меня есть arrayList с кучей строк в нем. У меня тоже есть другой arrayList с кучей строк. Я хотел бы увидеть, содержит ли первый список массивов какую-либо строку из второго arrayList и, если да, просто распечатать ее. Должно быть простым, но, похоже, не работает (и есть определенно общие строки).

Вот мой код:

 ArrayList<String> che=new ArrayList<String>();
 for (int i = 1; i <= rsmd.getColumnCount(); i++) {
     System.out.println("COL"+rsmd.getColumnName(i));
     che.add(rsmd.getColumnName(i).trim());
 }
 String key = "";
 String keys = "";
 for (Entry<String, String> entry : map.entrySet()) {
     key = entry.getKey().replace(":","")
           .replace(">","MoreThan").replace("__","")
           .replaceAll("\\." ,"").replaceAll("\\(s\\)" ,"")
           .replaceAll(",$" ,"").replaceAll("%" ,"")
           .replaceAll("\\(" ,"").replaceAll("\\)" ,"")
           .replace("-" ,"").replace("-" ,"")
           .replace("_" ,"").replace("#" ,"")
           .replaceAll("\\/", "_").replaceAll("@", "AT")
           .replaceAll("&", "AND").replaceAll("\\?", "AND")
           .replace("≤","LessThan").replace("≥","MoreThan")
           .replaceAll("\\s" ,"").replaceAll("^,","");  
     for (String n:che){
         System.out.println("Che_String "+n);
         System.out.println("KEY_String "+key);
         if (n==key){
             System.out.println("Detected the same: "+key.trim());
         }
     }
 }

Я знаю, что есть много замен, и я должен использовать StringUtils.repaceEach и я сделаю это, но сначала нужно отсортировать

System.out.println вывод показывает, что есть несколько похожих строк, но они не собираются, например

Che_String Gender
KEY_String Gender

Но мой Detected the same: выход пуст.

Я также пытался che.contains(key) с такими же результатами.

2 ответа

Решение

Строка должна сравниваться с String.equals(String) метод. С == Вы сравниваете, если это один и тот же объект, а не тот же контент. List.contains(Object) использует equals() метод. Так что это должно работать. Возможно, у вас есть пробел в конце текста, который не виден в тестовой распечатке.

В Java 8:

che.stream().filter(n -> map.keySet().contains(n)).forEach(match -> System.out.println("Detected the same: " + match);)

Другие вопросы по тегам