循环运行lambda

时间:2018-07-24 04:20:59

标签: java lambda

我正在通过提供Instant的时间来创建活动。

serviceContainer.consumeEvent(event ->
        event.setPayload(new TriggerCalculation(Instant.ofEpochMilli(serviceContainer.currentTimeMillis())
)));

但是,我想给Instant添加固定的时间间隔,并使用新的Instant创建一个新事件。

serviceContainer.consumeEvent(event ->
        event.setPayload(new TriggerCalculation(Instant.ofEpochMilli(serviceContainer.currentTimeMillis()).plus(1, ChronoUnit.DAYS)
        )));

但是,由于索引i必须是最终的,因此我无法在for循环中执行此操作:

for(int i=1; i<7; i++){
    serviceContainer.consumeEvent(event ->
            event.setPayload(new TriggerCalculation(Instant.ofEpochMilli(serviceContainer.currentTimeMillis()).plus(i, ChronoUnit.DAYS)
            )));

}

如果我想在lambda中增加一个值,如何在java中循环一个lambda?

3 个答案:

答案 0 :(得分:2)

您可以为此使用IntStream.range

IntStream.range(0, 7)
            .forEach(i -> serviceContainer.consumeEvent(event ->
                    event.setPayload(new TriggerCalculation(Instant.ofEpochMilli(serviceContainer.currentTimeMillis()).plus(i, ChronoUnit.DAYS)
                    ))));

答案 1 :(得分:2)

将整数移出lambda

for(int i=1; i<7; i++){
    final TriggerCalculation tc = new TriggerCalculation(Instant.ofEpochMilli(serviceContainer.currentTimeMillis()).plus(i, ChronoUnit.DAYS));
    serviceContainer.consumeEvent(event -> event.setPayload(tc));
}

答案 2 :(得分:1)

您可以执行以下操作:

for(int i=1; i<7; i++){
    final int newI = i;
    serviceContainer.consumeEvent(event ->
            event.setPayload(new TriggerCalculation(Instant.ofEpochMilli(serviceContainer.currentTimeMillis()).plus(newI, ChronoUnit.DAYS)
            )));

}

或者这个:

IntStream.range(0, 7)
    .mapToObj(x -> Instant.ofEpochMilli(serviceContainer.currentTimeMillis()).plus(x, ChronoUnit.DAYS))
    .map(TriggerCalculation::new)
    .forEach(x -> {
        serviceContainer.consumeEvent(event ->
            event.setPayload(x));
    });