3 回答

TA貢獻1779條經驗 獲得超6個贊
它檢查每個元素,如果它是equal()
您要測試的元素。這意味著,如果兩個元素通過equals()
方法測試,則該contains()
方法將為它們返回 true,如果該equals()
方法返回 false,則該contains()
方法也將返回 false。
來自 Java 文檔:
布爾值包含(對象o)
如果此列表包含指定元素,則返回 true。更正式地說,當且僅當此列表包含至少一個元素 e 且滿足 (o==null ? e==null : o.equals(e)) 時,才返回 true。

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<>

TA貢獻1719條經驗 獲得超6個贊
我們忽略的是,即使為equals()
類定義了方法,該hashCode()
方法仍然是需要關心的(即使在這里您假設比較字符串可能不是?)。
為什么 ?
contains
取決于equals
和等于可以hashCode
判斷我們是否在引用方面談論同一個對象。
根據合同?恢復contains()
工作更多文件equals-hashCode
添加回答
舉報