У меня была немного другая проблема. Вместо увеличения локальной переменной в forEach мне нужно было присвоить объект локальной переменной.
Я решил это, определив частный внутренний класс домена, который охватывает как список, который я хочу перебирать (countryList), так и результат, который я надеюсь получить из этого списка (foundCountry). Затем, используя Java 8 «forEach», я перебираю поле списка и, когда объект, который мне нужен, найден, я назначаю этот объект полю вывода. Таким образом, это присваивает значение полю локальной переменной, не изменяя саму локальную переменную. Я считаю, что, поскольку сама локальная переменная не изменяется, компилятор не жалуется. Затем я могу использовать значение, записанное в поле вывода, вне списка.
Объект домена:
public class Country {
private int id;
private String countryName;
public Country(int id, String countryName){
this.id = id;
this.countryName = countryName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCountryName() {
return countryName;
}
public void setCountryName(String countryName) {
this.countryName = countryName;
}
}
Объект-оболочка:
private class CountryFound{
private final List<Country> countryList;
private Country foundCountry;
public CountryFound(List<Country> countryList, Country foundCountry){
this.countryList = countryList;
this.foundCountry = foundCountry;
}
public List<Country> getCountryList() {
return countryList;
}
public void setCountryList(List<Country> countryList) {
this.countryList = countryList;
}
public Country getFoundCountry() {
return foundCountry;
}
public void setFoundCountry(Country foundCountry) {
this.foundCountry = foundCountry;
}
}
Повторять операцию:
int id = 5;
CountryFound countryFound = new CountryFound(countryList, null);
countryFound.getCountryList().forEach(c -> {
if(c.getId() == id){
countryFound.setFoundCountry(c);
}
});
System.out.println("Country found: " + countryFound.getFoundCountry().getCountryName());
Вы можете удалить метод класса оболочки "setCountryList ()" и сделать поле "countryList" окончательным, но я не получал ошибок компиляции, оставив эти детали как есть.