我收到警告,watchStore.contains(s)
是对java.util.Collection#contains
的可疑电话。我该如何解决?我想使用contains()
来查找具有匹配序列号的特定对象。
public Watch findWatchBySerialNumber(long srch) {
long s = srch;
Watch watch = null;
for(int i = 0; i < watchStore.size(); i++) {
watch = watchStore.get(i);
if(watchStore.contains(s)) {
System.out.print("item found");
return watch;
}
}
System.out.print("item not found");
return null; // watch is not found.
}
答案 0 :(得分:3)
假设Watch
是班级,watchStore
是List<Watch>
,并且serialNo
上存在Watch
字段...
public Optional<Watch> findWatchBySerialNumber(long serial) {
return watchStore.stream()
.filter(w -> w.getSerialNo() == serial)
.findFirst();
}
如果您不使用Java 8,代码就会关闭,但由于您有机会返回null
,因此更加危险。如果您可以使用Guava的Optional
,那么这就是更好的选择。
public Watch findWatchBySerialNumber(long serial) {
for(Watch w : watchStore) {
if(w.getSerialNo() == serial) {
return w;
}
}
return null;
}
由于您的列表不包含contains
,因此Long
无法正常工作,它包含Watch
个。这也是编译器认为它可疑的原因; contains
接受Object
,但如果您要查找的内容与false
的内容相同,则equals
会返回render :text => '<script type="text/javascript">window.opener.location.reload(true);window.close();</script>'
你的清单。
您必须遍历整个集合才能在此场景中找到它,特别是因为您正在寻找这些对象上的特定属性,而不是特定的,易于提供的值。
答案 1 :(得分:-1)
请问我该如何解决这个问题。我想用contains()来查找 具有匹配序列号的特定对象。
在这种情况下,覆盖Watch的equals()以使用serialNumber字段进行比较。
然后添加接受serialNumber的构造函数。
public class Watch {
private final long serialNumber;
public Watch(long serialNumber) {
this.serialNumber = serialNumber;
}
@Override
public boolean equals(Object obj) {
return obj == this ||
(obj instanceof Watch && ((Watch)obj).serialNumber == serialNumber);
}
@Override
public int hashCode() {
return (int)serialNumber;
}
}
将if(watchStore.contains(s)){
替换为if(watchStore.contains(watchToFind)){
,其中Watch watchToFind = new Watch(s);
答案 2 :(得分:-2)
你可以使用org.apache.commons.lang.ArrayUtils包中的contains方法。
检查值是否在给定数组中。
如果传入空数组,则该方法返回false。
参数: 对数组进行数组搜索 valueToFind要查找的值 返回: 如果数组包含对象
,则为truelong [] imageHashes = {12l,13l,14l,15l}; System.out.println(ArrayUtils.contains(imageHashes,13l));