Java 快速获取两个有序iterables的公共项的方法?

Java 快速获取两个有序iterables的公共项的方法?,java,guava,apache-commons,iterable,Java,Guava,Apache Commons,Iterable,如何获取两个有序的iterables的公共项?是否有来自apache commons或Guava的任何库方法或任何此类库使用快速算法进行此操作?假设您的元素具有可比性: List<E> res = new ArrayList<>(); Iterator<E> it1 = orderedIterables1.iterator(); Iterator<E> it2 = orderedIterables2.iterator(); if(!it1.hasN

如何获取两个有序的iterables的公共项?是否有来自apache commons或Guava的任何库方法或任何此类库使用快速算法进行此操作?

假设您的元素具有可比性:

List<E> res = new ArrayList<>();
Iterator<E> it1 = orderedIterables1.iterator();
Iterator<E> it2 = orderedIterables2.iterator();
if(!it1.hasNext() || !it2.hasNext()) { // is one of the iterables empty?
    return res;
}
E e1 = it1.next();
E e2 = it2.next();
while(it1.hasNext() && it2.hasNext()) {  // go through each iterable
    int c = e1.compareTo(e2);
    if(c == 0) {
        res.add(e1);
        e1 = it1.next();
        e2 = it2.next();
    } else if(c < 0) {   // e1 is lesser than e2, so take next e1
        e1 = it1.next();
    } else {             // e2 is lesser than e1, so take next e2
        e2 = it2.next();
    }
}
// one of the iterables has now been exhausted 
int c = e1.compareTo(e2);
if(c < 0) {
    while(c < 0 && it1.hasNext()) {  // while e1 < e2, let's take the next e1!
        e1 = it1.next();
        c = e1.compareTo(e2);
    }
} else if(c > 0) {
    while(c > 0 && it2.hasNext()) {  // while e2 < e1, let's take the next e2!
        e2 = it2.next();
        c = e1.compareTo(e2);
    }
}
if(c == 0) {
    res.add(e1);
}
List res=new ArrayList();
迭代器it1=ordereditables1.Iterator();
迭代器it2=ordereditables2.Iterator();
如果(!it1.hasNext()| |!it2.hasNext()){//其中一个可重用项是空的吗?
返回res;
}
e1=it1.next();
e2=it2.next();
while(it1.hasNext()&&it2.hasNext()){//遍历每个iterable
int c=e1。与(e2)相比;
如果(c==0){
决议增补(e1);
e1=it1.next();
e2=it2.next();
}否则,如果(c<0){//e1小于e2,则取下一个e1
e1=it1.next();
}否则{//e2小于e1,所以取下一个e2
e2=it2.next();
}
}
//其中一个部落现在已经精疲力竭了
int c=e1。与(e2)相比;
if(c<0){
while(c<0&&it1.hasNext()){//whilee10),则为else{
while(c>0&&it2.hasNext()){//whilee2
您见过Java 8中使用lambada表达式的新for循环吗?不知道。。顺便说一句,我还没有使用Java8。。我在java 7上看一看,你可能会发现它很有趣我不同意:
List(4)
List(1,2,4)
甚至没有进入循环<代码>列表(1,4)和
列表(1,2,4)
没有,但需要将
4
添加到结果中。键入:
ee1=it1.hasNext()->
ee1=it1.next()(与e2…
相同)