2016-03-04 22 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