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;
}
添加回答
举报