ฉันมีปัญหาที่แตกต่างกันเล็กน้อย แทนที่จะเพิ่มตัวแปรโลคัลใน 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;
}
}
วัตถุ Wrapper:
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());
คุณสามารถลบเมธอดคลาส wrapper "setCountryList ()" และทำให้ฟิลด์ "countryList" เป็นขั้นสุดท้าย แต่ฉันไม่ได้รับข้อผิดพลาดในการคอมไพล์โดยทิ้งรายละเอียดเหล่านี้ไว้ตามที่เป็นอยู่