2016-03-04 65 views
2

有什麼辦法可以做類似於Stream.skip(long)的事情,但是使用Predicate而不是確切的數字嗎?Java 8 Stream.skip with Predicate

我需要跳過元素,直到有一個給定的ID,然後我需要繼續應用過濾器,限制等任何建議?

+0

請寫出具體代碼問題。遵循教程http://stackoverflow.com/help/how-to-ask – SkyWalker

+0

您需要一個僅在Java-9中添加的'dropWhile(Predicate)'。一些第三方庫也提供這種方法。 –

回答

4

我懷疑你需要寫一個狀態謂語或使用包裝像

public class FromPredicate<T> implements Predicate<T> { 
    boolean started = false; 
    Predicate<T> test; 
    FromPredicate(Predicate<T> test) { this.test = test; } 

    public static Predicate<T> from(Predicate<T> test) { return new Predicate<>(test); } 

    public boolean test(T t) { 
     return started || (started = test.test(t)); 
    } 
} 

Stream那麼你可以做

Stream.of(1,2,3,4,5) 
     .filter(from(i -> i % 2 == 0))) 
     .forEach(System.out::println); 

應打印

2 
3 
4 
5