我正在通过提供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?
答案 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));
});