1 回答

TA貢獻1807條經驗 獲得超9個贊
所以
FilmList filmList = new FilmList();
filmList.addFilm
System.out.println(searchFilm().toString());
您的代碼有點奇怪,但我想您的意思是將Film實例傳遞給addFilm,然后使用filmList.searchFilm().
反正
filter(
i -> i.getLocation().contains(getShowLocation()) &&
i.getScreenDay().contains(getScreenWeek())
)
在這里,您正在過濾filmArrayList,此時它包含一個元素。和
i.getLocation().contains(getShowLocation())
基本上意味著
i.getLocation().contains(null)
因為該showLocation字段未初始化。
這同樣適用于第二個條件,使用screenWeek.
我實際上很驚訝它沒有拋出 a NullPointerException,因為
public boolean contains(CharSequence s) {
return indexOf(s.toString()) > -1; // NullPointerException at s.toString()
}
但是無論如何,假設您初始化了這些字段,然后唯一的元素被filter操作丟棄,這就是您看到Optional.empty.
final FilmList filmList = new FilmList();
filmList.setShowLocation("Your location");
filmList.setScreenWeek("Screen week");
filmList.addFilm(filmInstance);
System.out.println(filmList.searchFilm().toString());
您顯然需要一個完全構造的Film實例
final Film filmInstance = new Film();
filmInstance.title = "The NullPointerException adventure";
filmInstance.price = 12D;
filmInstance.ageRestriction = "+18";
filmInstance.rating = 18D;
filmInstance.genre = "Horror";
filmInstance.location = "US";
filmInstance.screenDay = "Monday";
filmList.addFilm(filmInstance);
問題出在FilmList#setShowLocation方法上。
您正在分配showLocation給自己,并且該location參數未使用。
public void setShowLocation(String location) {
this.showLocation = showLocation;
}
這應該是
public void setShowLocation(String location) {
this.showLocation = location;
}
添加回答
舉報