in nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineHelper.java [107:148]
private static List<Long> merge(List<Long> l1, List<Long> l2) {
if (l1.isEmpty())
return l2;
else if (l2.isEmpty())
return l1;
int size1 = l1.size();
int size2 = l2.size();
if (size1 == 1 && size2 > 1 || size2 == 1 && size1 > 1) {
// Minor optimization in case if one of the lists has only one element.
List<Long> res = size1 == 1 ? l2 : l1;
Long val = size1 == 1 ? l1.get(0) : l2.get(0);
if (excludes(val, res))
res.add(val);
return res;
}
List<Long> res = new ArrayList<>(size1 + size2);
for (int i = 0, max = Math.max(size1, size2); i < max; i++) {
Long v1 = i < size1 ? l1.get(i) : null;
Long v2 = i < size2 ? l2.get(i) : null;
if (v1 != null && v2 != null) {
if (containsAllBits(v1, v2))
v1 = null;
else if (containsAllBits(v2, v1))
v2 = null;
}
if (v1 != null && excludes(v1, res))
res.add(v1);
if (v2 != null && excludes(v2, res))
res.add(v2);
}
return res;
}