Tôi đã có một vấn đề hơi khác. Thay vì tăng một biến cục bộ trong forEach, tôi cần gán một đối tượng cho biến cục bộ.
Tôi đã giải quyết vấn đề này bằng cách xác định một lớp miền bên trong riêng tư bao bọc cả danh sách tôi muốn lặp lại (countryList) và kết quả mà tôi hy vọng nhận được từ danh sách đó (foundCountry). Sau đó, sử dụng Java 8 "forEach", tôi lặp qua trường danh sách và khi đối tượng tôi muốn được tìm thấy, tôi gán đối tượng đó cho trường đầu ra. Vì vậy, điều này chỉ định một giá trị cho một trường của biến cục bộ, không thay đổi chính biến cục bộ. Tôi tin rằng vì bản thân biến cục bộ không bị thay đổi, trình biên dịch không phàn nàn. Sau đó, tôi có thể sử dụng giá trị mà tôi đã nắm bắt trong trường đầu ra, bên ngoài danh sách.
Đối tượng miền:
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;
}
}
Đối tượng gói:
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;
}
}
Lặp lại hoạt động:
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());
Bạn có thể xóa phương thức lớp wrapper "setCountryList ()" và đặt trường "countryList" là cuối cùng, nhưng tôi không gặp lỗi biên dịch khi để nguyên các chi tiết này.