Java 8 过滤器谓词参数索引越界

标签 java java-8 java-stream predicate

一段时间以来,我一直在努力解决这个问题,但我的 Java 8 技能需要一些努力。

我遇到的这个问题是在 IntStream 中。我正在使用一个过滤器来调用一个谓词,该谓词将对列表中的当前项目和下一个项目运行一些逻辑。

return IntStream.range(0, someList.size() - 1)
            .filter(n -> someMethod(someList.get(n), someList.get(n + 1)))
            .mapToObj(i -> ((Integer) i).toString())
            .collect(Collectors.joining(", "));

问题是没有检查最后一项。

假设我在列表中有 10 个项目,第一次迭代将查看项目 0 和 1,然后是 1 和 2 等等,直到我们到达 10 和 IndexOutOfBounds

这里没有抛出错误,这很奇怪,但可能在 Java 8 中是预期的?

我怎么能说“如果索引越界就返回 true”?

我希望这是有道理的。干杯

最佳答案

您正在尝试从 0 迭代到 size+1,因此对于大小为 3 的列表,您正在尝试:

list[0] - 有效
list[1] - 有效
list[2] - 有效
list[3] - OOB,因为列表的大小只有 3

将其更改为:

return IntStream.range(0, someList.size())
    .filter(n -> n < someList.size()-1 ? someMethod(someList.get(n), someList.get(n+1)) : someOtherMethod(someList.get(n)).collect(Collectors.toList));

这将解决两件事。第一,它会修复你在 range() 中的 OOB,第二,它会检查 n 是否在为 n 调用 someMethod 的范围内> 和 n+1。不过,您需要为列表中的最后一个元素创建另一种方法来处理它

关于Java 8 过滤器谓词参数索引越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45676266/

相关文章:

java - 区分jpa DataIntegration异常

java - 使用 Java 8 jar 命令从 zip 存档中提取 4GB+ 文件时出现 "invalid CEN header (bad signature)"

Java8 Stream List<Map<String,Object>> 分组依据和计数值

具有可关闭资源的 Java 收集器作为累加器

java - 使用 java 8 的 null first 方法时出现以下异常

java - 我应该尽可能使用并行流吗?

java - 使用 GroupLayout 后获取 JComponent 的正确大小

java - 使用 Hibernate Get 和多列主键

java - 转义序列无效

Java 8 : Using Comparator. 在比较基于给定键的映射中的值时进行比较