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
添加回答
举报