Вы должны обработать строки в своих списках, чтобы иметь возможность сравнивать любую последовательность слов, которые они содержат.
Вы можете добиться этого, преобразовав строку в набор строк для каждого списка, найдя пересечение и / или различие между этими списками с последующим перестроением строк из наборов:
private static List<Set<String>> convert(List<String> list) {
return list.stream()
.map(s -> Arrays.stream(s.split(" ")) // split string
.collect(Collectors.toCollection(LinkedHashSet::new))) // build set
.collect(Collectors.toList()); // get list of sets
}
private static List<String> deconvert(List<Set<String>> listSets) {
return listSets.stream()
.map(set -> String.join(" ", set)) // join strings in the set
.collect(Collectors.toList()); // get list of strings
}
// test
List<String> list1 = new ArrayList<>();
list1.add("Soumya Ranjan Das");
list1.add("Test");
List<String> list2 = new ArrayList<>();
list2.add("Soumya Das Ranjan");
list2.add("Something");
List<Set<String>> listSets1 = convert(list1);
List<Set<String>> listSets2 = convert(list2);
// intersection
listSets1.retainAll(listSets2);
System.out.println("similar elements: " + deconvert(listSets1));
List<Set<String>> listSets3 = convert(list1);
List<Set<String>> listSets4 = convert(list2);
// union of two lists
listSets3.addAll(listSets4);
// union - intersection = difference
listSets3.removeAll(listSets1);
System.out.println("different elements: " + deconvert(listSets3));
вывод:
similar elements: [Soumya Ranjan Das]
different elements: [Test, Something]