改为创建数组索引流,并在映射到数组元素之前对其进行过滤:
int[] numbers = ...;
IntStream.range(0, numbers.length).filter(i -> i!=1)
.map(i -> numbers[i]).forEach(System.out::println);
如果您首先需要按索引过滤掉一些元素,而某些元素按值过滤,则可以在地图之前有一个过滤器,之后有一个过滤器.
如果你需要检查同一过滤器中的索引和值,那么我认为最好的方法是创建一个类来保存两个值:
class IndexedValue {
private int index, value;
IndexedValue(int index, int value) {
this.index = index ;
this.value = value ;
}
int getIndex() { return index ;}
int getValue() { return value ;}
}
然后你就可以做到
int[] numbers = ... ;
IntStream.range(0, numbers.length).map(i -> new IndexedValue(i, numbers[i]))
.filter(v -> v.getIndex() == 1 || v.getValue() % 2 == 0)
.forEach(System.out::println);