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

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

“contains()”方法如何在 List<string> 上真正起作用?

“contains()”方法如何在 List<string> 上真正起作用?

德瑪西亞99 2023-07-13 14:12:47
我正在嘗試檢查兩個列表是否包含相同的值,但我無法弄清楚為什么這個特定值會觸發我的 FileExceptionprivate static void checkFileHeaders(List<ColumnDefinition> columnsDefinitions, ArrayList<String> columnsName) throws FileException {    for (ColumnDefinition cd : columnsDefinitions) {        if(!columnsName.contains(cd.getFieldNameInFile())) {            throw new FileException("Parameter "+cd.getFieldNameInFile() +" missing ");        }    }}正如我們在調試器中看到的,我的值存在于列表中,它可能與編碼有關嗎?它適用于其他值,但不適用于此特定值。我知道 contains() 的工作方式與 equals() 類似,所以這里出了什么問題如果我看一下各個角色:cd.getFieldNameInFile() : [90, 66, 75, 80, 70, 45, 66, 85, 75, 82, 83]列名[0] : [-1, -2, 90, 0, 66, 0, 75, 0, 80, 0, 70, 0, 45, 0, 66, 0, 85, 0, 75, 0, 82, 0, 83, 0]如何解決這個差異,原因是什么?
查看完整描述

3 回答

?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

它檢查每個元素,如果它是equal()您要測試的元素。這意味著,如果兩個元素通過equals()方法測試,則該contains()方法將為它們返回 true,如果該equals()方法返回 false,則該contains()方法也將返回 false。

來自 Java 文檔:

布爾值包含(對象o)

如果此列表包含指定元素,則返回 true。更正式地說,當且僅當此列表包含至少一個元素 e 且滿足 (o==null ? e==null : o.equals(e)) 時,才返回 true。

查看完整回答
反對 回復 2023-07-13
?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

顯然getFieldNameInFile不是一個字符串。所以人們應該采取toString,


private static void checkFileHeaders(List<ColumnDefinition> columnsDefinitions,

        List<String> columnsName) throws FileException {

    for (ColumnDefinition cd : columnsDefinitions) {

        if(!columnsName.contains(cd.getFieldNameInFile().toString()) {

            throw new FileException("Parameter "+cd.getFieldNameInFile() +" missing ");

        }

    }

}

使用流:


private static void checkFileHeaders(List<ColumnDefinition> columnsDefinitions,

        Set<String> columnsName) throws FileException {

    if (columnsDefinitions.streams

            .map(ColumnDefinition::getFieldNameInFile)

            .map(Object::toString)

            .anyMatch(nm -> !columnsName.contains(nm)) {

        throw new FileException("Parameter " + cd.getFieldNameInFile() + " missing ");

    }

}

此外ArrayList,它太具體了,請使用接口,List因為此方法可以適用于任何類型的 List 實現。


例如,對于a 來說,Set<String>速度會快得多。containsHashSet<>


查看完整回答
反對 回復 2023-07-13
?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

我們忽略的是,即使為equals()類定義了方法,該hashCode()方法仍然是需要關心的(即使在這里您假設比較字符串可能不是?)。

為什么 ?

contains取決于equals和等于可以hashCode判斷我們是否在引用方面談論同一個對象。

根據合同?恢復contains()工作更多文件equals-hashCode


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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