第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 Optional 繼續(xù)說我的 List 為空?

為什么 Optional 繼續(xù)說我的 List 為空?

森林海 2022-07-06 17:15:08
我正在嘗試創(chuàng)建一個管理訂票系統(tǒng)的 Java 程序。我有一個電影課:    public class Film {  private String title;  private Double price;  private String ageRestriction;  private double rating;  private String genre;  private String location;  private String screenDay;基于兩個參數(shù)(位置和周)創(chuàng)建電影項的 ArrayList 并排序的 FilmList 類    public class FilmList {    public FilmList(ArrayList<Film> filmArrayList) {    this.filmArrayList = filmArrayList;  }  public FilmList (){    this.filmArrayList = new ArrayList<>();  }  public ArrayList <Film> filmArrayList;  public void addFilm(Film films){    this.filmArrayList.add(films);  }  private String showLocation;  private String screenWeek;  public void setScreenWeek(String screenDay) {    this.screenWeek = screenDay;  }  public String getScreenWeek() {    return screenWeek;  }  public void setShowLocation(String location) {    this.showLocation = showLocation;  }  public String getShowLocation() {    return showLocation;  }  public Optional<Film> searchFilm(){    Optional<Film> movieFounded = filmArrayList.stream().filter(i -> i.getLocation().contains(getShowLocation()) &&            i.getScreenDay().contains(getScreenWeek())).findAny();    return movieFounded;  }setShowLocation 參數(shù)是通過單擊按鈕來設(shè)置的(每個劇院都有一個,而 setScreenWeek 是由 Combobox 設(shè)置的圖形單元與控制臺的接口。請注意,如果我按下按鈕而不選擇組合框上的任何內(nèi)容,則會出現(xiàn)錯誤。
查看完整描述

1 回答

?
函數(shù)式編程

TA貢獻1807條經(jīng)驗 獲得超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()

}

但是無論如何,假設(shè)您初始化了這些字段,然后唯一的元素被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());

您顯然需要一個完全構(gòu)造的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參數(shù)未使用。


public void setShowLocation(String location) {

    this.showLocation = showLocation;

}

這應(yīng)該是


public void setShowLocation(String location) {

    this.showLocation = location;

}


查看完整回答
反對 回復(fù) 2022-07-06
  • 1 回答
  • 0 關(guān)注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號