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

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

如何實現(xiàn)方法引用作為謂詞?

如何實現(xiàn)方法引用作為謂詞?

慕虎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條經(jīng)驗 獲得超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不需要是有效的最終的。


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


查看完整回答
反對 回復 2023-10-13
  • 1 回答
  • 0 關(guān)注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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