使用 foreach 循环在 LinkedHashMap 中递增计数器
Incrementing counter in LinkedHashMap using foreach-loop
我正在遍历 LinkedHashMap 并递增 i
计数器,下面是我过去使用 for 循环执行此操作的方式。
int i = 0;
for (Map.Entry<String, String> entry : linkedHashMap.entrySet()) {
Car car = new Car();
car.setCarId(String.valueOf(i++));
car.setCarName(entry.getKey());
car.setOdometerReading(entry.getValue());
appRoomRepository.insertCarDetails(car);
}
下面是我想如何使用 foreach 循环
int i = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
linkedHashMap.forEach((key, value) -> {
Car car = new Car();
car.setCarId(String.valueOf(i++));
car.setCarName(key);
car.setOdometerReading(value);
appRoomRepository.insertCarDetails(car);
});
}
我卡在这一行了car.setCarId(String.valueOf(i++))
;
我不断收到此错误消息“在 lambda 表达式中使用的变量应该是最终的或实际上是最终的”。如何增加计数器 i
?
几个选项:
您可以使用范围进行迭代
IntStream.range(0, 10).forEach(n ->...
或者您可以使用 AtomicInteger 并将其命名为 'final'
这个 post 很好地讨论了为什么需要这样做。
Lambda 表达式可以使用在外部作用域中定义的变量
它们可以捕获静态变量、实例变量和局部变量,但只有局部变量必须是 final 或有效的 final
使用原子整数:
AtomicInteger i = new AtomicInteger(0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
linkedHashMap.forEach((key, value) -> {
Car car = new Car();
car.setCarId(String.valueOf(i.getAndIncrement()));
car.setCarName(entry.getKey());
car.setOdometerReading(entry.getValue());
appRoomRepository.insertCarDetails(car);
});
}
```
我正在遍历 LinkedHashMap 并递增 i
计数器,下面是我过去使用 for 循环执行此操作的方式。
int i = 0;
for (Map.Entry<String, String> entry : linkedHashMap.entrySet()) {
Car car = new Car();
car.setCarId(String.valueOf(i++));
car.setCarName(entry.getKey());
car.setOdometerReading(entry.getValue());
appRoomRepository.insertCarDetails(car);
}
下面是我想如何使用 foreach 循环
int i = 0;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
linkedHashMap.forEach((key, value) -> {
Car car = new Car();
car.setCarId(String.valueOf(i++));
car.setCarName(key);
car.setOdometerReading(value);
appRoomRepository.insertCarDetails(car);
});
}
我卡在这一行了car.setCarId(String.valueOf(i++))
;
我不断收到此错误消息“在 lambda 表达式中使用的变量应该是最终的或实际上是最终的”。如何增加计数器 i
?
几个选项:
您可以使用范围进行迭代
IntStream.range(0, 10).forEach(n ->...
或者您可以使用 AtomicInteger 并将其命名为 'final'
Lambda 表达式可以使用在外部作用域中定义的变量 它们可以捕获静态变量、实例变量和局部变量,但只有局部变量必须是 final 或有效的 final
使用原子整数:
AtomicInteger i = new AtomicInteger(0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
linkedHashMap.forEach((key, value) -> {
Car car = new Car();
car.setCarId(String.valueOf(i.getAndIncrement()));
car.setCarName(entry.getKey());
car.setOdometerReading(entry.getValue());
appRoomRepository.insertCarDetails(car);
});
}
```