Чтобы найти пересечение между двумя списками, независимо от регистра, вам нужно создать наборы строчных (или прописных) версий строк, например:
String[] a1 = {"aBc", "deF", "Ghk"};
String[] a2 = {"Abc", "ghK", "lmN"};
Set<String> s1 = new HashSet<>();
for(String a : a1) s1.add(a.toLowerCase());
Set<String> s2 = new HashSet<>();
for(String a : a2) s2.add(a.toLowerCase());
s1.retainAll(s2);
System.out.println(s1);
Вывод:
[abc, ghk]
Однако, если вы хотите сообщить об исходных версиях соответствующих строк, вам необходимо сохранить соответствие между строчными и исходными версиями, как в:
String[] a1 = {"aBc", "deF", "Ghk"};
String[] a2 = {"Abc", "ghK", "lmN"};
Map<String, String> m1 = new HashMap<>();
for(String a : a1) m1.put(a.toLowerCase(), a);
Map<String, String> m2 = new HashMap<>();
for(String a : a2) m2.put(a.toLowerCase(), a);
m1.keySet().retainAll(m2.keySet());
System.out.println(m1.values());
for(String s : m1.keySet())
System.out.println(m1.get(s) + " : " + m2.get(s));
Вывод:
[aBc, Ghk]
aBc : Abc
Ghk : ghK