2014-06-10 14 views
1

我想檢查Java-8-Stream中兩個元素的順序。 我有這個迭代器解決方案:檢查Java-8-Stream中兩個元素的順序

public static boolean isBefore (A a1, 
           A a2, 
           Stream<A> as) { 
    Iterator<A> it = as.iterator(); 
    while (it.hasNext()) { 
     A a = it.next(); 
     if (a == a1) { 
      return true; 
     } else if (a == a2) { 
      return false; 
     } 
    } 
    throw new IllegalArgumentException (
     a1 + " and + " a2 + " arent elements of the stream!"); 
} 

有沒有迭代器的解決方案中更多的功能/非必要的風格?

回答

3

這可能是這樣的

as.filter (a -> (a==a1) || (a==a2)).findFirst() 

,然後檢查結果是A1或A2或空。 對不起,我不給一個完整的解決方案,這很難做,如果從我的智能手機

+0

其實我甚至不確定有第一種方法,但限制(1)也可以做這項工作 – Eran

+1

' findFirst()'返回一個'Optional',如果兩個都沒有被找到,它將是空的,即不是'null'。請參閱http://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#findFirst-- – Holger

+0

@Holger感謝您的編輯。我離開我的電腦,無法檢查API來驗證方法名稱。 – Eran