Biraz farklı bir problemim vardı. ForEach'de yerel bir değişkeni artırmak yerine, yerel değişkene bir nesne atamam gerekiyordu.
Bunu, hem yinelemek istediğim listeyi (countryList) hem de bu listeden almayı umduğum çıktıyı (foundCountry) saran özel bir iç alan sınıfı tanımlayarak çözdüm. Daha sonra Java 8 "forEach" kullanarak liste alanını yineliyorum ve istediğim nesne bulunduğunda bu nesneyi çıktı alanına atıyorum. Bu, yerel değişkenin kendisini değiştirmeden, yerel değişkenin bir alanına bir değer atar. Yerel değişkenin kendisi değişmediği için derleyicinin şikayet etmediğine inanıyorum. Daha sonra çıktı alanında yakaladığım değeri listenin dışında kullanabilirim.
Etki Alanı Nesnesi:
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;
}
}
Sarmalayıcı nesne:
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;
}
}
Yineleme işlemi:
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 ()" sarmalayıcı sınıf yöntemini kaldırıp "countryList" alanını son haline getirebilirsiniz, ancak bu ayrıntıları olduğu gibi bırakarak derleme hataları almadım.