Если у нас есть два списка:
list1 = [1,2,1,1,2,4,1];
list2 = [1,2,1,3,2,1];
, то новый список содержит общие элементы или пересечение списков, а затем элементы добавляются с использованием счетчика частоты:
Ожидаемый результат:
list3 = [1,1,1,2,2];
Решение, с которым я пришел, но оно не оптимизировано
List<Integer> commonlist = new ArrayList<Integer>(list2);
List<Integer> intersectionlist = new ArrayList<Integer>();
commonlist.retainAll(list1);
for (int i : commonlist) {
int freq1 = Collections.frequency(list1, i);
// System.out.println("list1: " + i + " -> " + freq1);
int freq2 = Collections.frequency(list2, i);
// System.out.println("list2: " + i + " -> " + freq2);
if (freq1 < freq2) {
for (int j = 1; j <= freq1; j++) {
intersectionlist.add(i);
}
} else {
for (int j = 1; j <= freq2; j++) {
intersectionlist.add(i);
}
}
}
System.out.println(intersectionlist);