有没有办法在Java8中构建一个使用索引进行迭代的forEach方法?理想情况下,我想要这样的东西:

params.forEach((idx, e) -> query.bind(idx, e));

我现在能做的就是:

int idx = 0;
params.forEach(e -> {
  query.bind(idx, e);
  idx++;
});

推荐答案

由于您正在迭代一个可索引的集合(列表等),因此我假定您可以使用元素的索引进行迭代:

IntStream.range(0, params.size())
  .forEach(idx ->
    query.bind(
      idx,
      params.get(idx)
    )
  )
;

生成的代码类似于使用classic 的i++风格for循环迭代列表,只是更易于并行化(当然,假设对参数的并发只读访问是安全的).

Java相关问答推荐

AWS Java SDK 2(putTarget)+ MinIO:不支持您提供的授权机制.请使用AWS 4-HMAC-SHA 256

具有额外列的Hibert多对多关系在添加关系时返回NonUniqueHealthExcellent

为什么Java中的两个日期有差异?

转换为Biggram

Java中不同包中的类之间的配置共享

如何使用Java API在Oracle ODI中运行模拟?

有没有一种方法使保持活动设置专用于java.net.http.HttpClient的一个实例

上下文初始化期间遇到异常-使用Java配置配置HibernateTemplate Bean时

使用联接和分页的SpringBoot Spring数据JPA

使用Testcontainers与OpenLiberty Server进行集成测试会抛出SocketException

如何修复IndexOutOfBoundsException在ClerView适配器的onRowMoved函数?

如何获取Instant#of EpochSecond(?)的最大值

如何只修改父类ChroniclerView位置0处的第一个嵌套ChroniclerView(child)元素?

允许同时执行两个方法,但不能同时执行这两个方法

具有多个模式的DateTimeForMatter的LocalDate.parse失败

在Eclipse中可以使用外部字体吗?

模拟JUnit未检测到返回字符串的方法的任何声纳覆盖

无限递归Java问题

如何在Spring Security中设置一个任何人都可以打开的主页?

如何以事务方式向ibmmq发送消息