亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何實現方法引用作為謂詞?

如何實現方法引用作為謂詞?

慕虎7371278 2023-10-13 14:50:16
我是java8的新手,我試圖理解這段代碼。這是一段代碼:Stream.of("A", "B", "C").anyMatch(someObj.getStringValue()::equalsIgnoreCase)someObj.getStringValue()引用某個對象并getStringValue()返回某個字符串值。傳入的方法引用的等效謂詞是什么anyMatch(...)?我的理解是這相當于:Predicate<String> p = new Predicate<String>() {    @Override    public boolean test(String t) {        return someObject.getStringValue().equalsIgnoreCase(t);    }}Stream.of("A", "B", "C").anyMatch(p)這樣我得到錯誤“someObject在封閉范圍中定義的局部變量必須是最終的或有效的最終”。任何對此的解釋都值得贊賞。
查看完整描述

1 回答

?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

該someObj.getStringValue()表達式在外部求值,因此等效代碼為:


final String x = someObject.getStringValue();

Predicate<String> p = new Predicate<String>() {

    @Override

    public boolean test(String t) {

        return x.equalsIgnoreCase(t);

    }

}

Stream.of("A", "B", "C").anyMatch(p)

其中局部變量x也是“匿名”的。


因此,someObject不需要是有效的最終的。


您可以通過在調試器中放置斷點來驗證lambda 表達式getStringValue()的此行為。即使該test()方法被調用 3 次(因為流有 3 個元素,并且假設沒有匹配項),該getStringValue()方法也只會被調用一次。


查看完整回答
反對 回復 2023-10-13
  • 1 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號