java - 在 Java 8 中使用 IntStream.filter 时如何跳过特定的数组索引

标签 java java-8

我正在学习 Java 8 Stream API 并且是新手,

我想编写一个程序来使用 IntStream 查找整数数组中的偶数,所以我想出了这个解决方案,

int[] numbers = {1,2,3,4,5,6,7,8,9,10};

IntStream.of(numbers).filter(i -> i%2 == 0).forEach(System.out::println);

这对我来说工作正常。

但是我如何修改 filter 以跳过从 numbers 检查某些数组索引?

例如,

如果我想跳过 numbers[1] 是否被检查,我应该怎么做?

因为过滤器中的 i 是数组元素的值而不是它们的索引。

有可能吗?

最佳答案

改为创建数组索引流,并在映射到数组元素之前对其进行过滤:

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);

关于java - 在 Java 8 中使用 IntStream.filter 时如何跳过特定的数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28506111/

相关文章:

java - 即使使用同步块(synchronized block),ArrayList 也不是线程安全的?

java - Ant:javac 找不到类,即使它在类路径中

java 流 : grouping by and add fields

java - 从 JDK 1.7 开始,从 catch block 中抛出异常对象不需要 throws 子句!!!为什么会这样?

java - RichFaces 中的服务器端数据表排序

java - 如何使用 docx4j 识别 TextBox 中的文本并替换占位符

java - 微调器禁用滑动打开

java-8 - Java 8 Completable Futures 所有不同的数据类型

java - 如何使用 Jackson 从 JSON 对象内部的数组中检索值

java - 如何使用Optional检查java中集合中模型的所有属性不为空?