private static Set mergeWithDeduplication()

in lagerta-core/src/main/java/com/epam/lagerta/subscriber/lead/ReadTransactions.java [186:214]


    private static Set<UUID> mergeWithDeduplication(List<ReaderTxScope> scopes, List<ReaderTxScope> mergedBuffer,
                                                    Comparator<ReaderTxScope> comparator, Set<UUID> lostReaders) {
        Set<UUID> diedReaders = new HashSet<>();
        ListIterator<ReaderTxScope> firstIter = scopes.listIterator();
        Iterator<ReaderTxScope> secondIter = mergedBuffer.iterator();
        ReaderTxScope a = getNext(firstIter);
        ReaderTxScope b = getNext(secondIter);

        while (a != null && b != null) {
            int cmp = comparator.compare(a, b);

            if (cmp > 0) {
                firstIter.previous();
                firstIter.add(b);
                firstIter.next();
                b = getNext(secondIter);
            } else if (cmp < 0) {
                a = getNext(firstIter);
            } else if (lostReaders.contains(a.getReaderId())) {
                diedReaders.add(a.getReaderId());
                a = getNext(firstIter);
            }
        }
        while (b != null) {
            firstIter.add(b);
            b = getNext(secondIter);
        }
        return diedReaders;
    }