Сравните два комплекса строковых массивов [в ожидании]

У меня есть два ArrayList со значениями String, хранящихся в них. Списки могут быть: разного размера, иметь одинаковые значения для каждого списка и разные несоответствующие строки.

Пример:

List 1: "a","b","b","c","e","a","e","f","g";

List 2: "a","a","b","c","a","e","a","d","f","e","e","g";

В результате я хочу получить совпадающие значения в порядке списка 1 по сравнению со списком 2. Таким образом, результатом из примера будет:

Результат:

[String] [pos L1] [pos L2]

["a"] [0] [0]

["b"] [1] [2]

["c"] [3] [3]

["e"] [4] [5]

["a"] [5] [6]

["e"] [6] [9]

["g"] [8] [11]

Всего 2 ответа


Выполните два вложенных цикла и начните итерацию во втором цикле с индекса, который вы остановили на последней итерации вашего внутреннего цикла:

public static List<String> algo(List<String> l1, List<String> l2) {
        List<String> result = new ArrayList<>();

        int lastIndexFound = 0;

        for(int i = 0; i < l1.size(); i++) {
            for(int j = lastIndexFound; j < l2.size(); j++) {
                String list1element = l1.get(i);
                String list2element = l2.get(j);
                if(list1element.equals(list2element)) {
                    result.add(list1element);
                    lastIndexFound = j + 1;
                    break;
                }
            }
        }

        return result;
    }

Для тестирования :

List<String> list = Lists.newArrayList("a","b","b","c","e","a","e","f","g");
List<String> list2 = Lists.newArrayList("a","a","b","c","a","e","a","d","f","e","e","g");

algo(list, list2).forEach(System.out::println);

Это выводит:

a
b
c
e
a
e
g

ArrayList<yourElementType> resultsArray = new Arraylist<yourElementType>()

for (yourElementType e : List1){

if(List2.contains(e)){
resultsArray.add(e)
// if you want the exact position, use list2.indexof(e)
}

}

Есть идеи?

10000