Saya punya masalah yang sedikit berbeda. Alih-alih menambahkan variabel lokal di forEach, saya perlu menetapkan objek ke variabel lokal.
Saya menyelesaikan ini dengan mendefinisikan kelas domain dalam pribadi yang membungkus kedua daftar yang ingin saya ulangi (countryList) dan keluaran yang saya harapkan dari daftar itu (foundCountry). Kemudian menggunakan Java 8 "forEach", saya mengulangi bidang daftar, dan ketika objek yang saya inginkan ditemukan, saya menetapkan objek itu ke bidang keluaran. Jadi ini memberikan nilai ke bidang variabel lokal, tidak mengubah variabel lokal itu sendiri. Saya percaya bahwa karena variabel lokal itu sendiri tidak berubah, kompilator tidak mengeluh. Saya kemudian dapat menggunakan nilai yang saya tangkap di bidang keluaran, di luar daftar.
Objek Domain:
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;
}
}
Objek pembungkus:
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;
}
}
Operasi berulang:
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());
Anda dapat menghapus metode kelas pembungkus "setCountryList ()" dan membuat kolom "countryList" final, tetapi saya tidak mendapatkan kesalahan kompilasi yang membiarkan detail ini sebagaimana adanya.