我正在使用以下代码:
final UnassignedSubjectData selsub = (UnassignedSubjectData) spinSelectSubject
.getSelectedItem();
ArrayList<UnassignedSubjectData> selectedSubjectList = null;
if (selsubdata != null) {
selectedSubjectList = new ArrayList<UnassignedSubjectData>(
Arrays.asList(selsubdata));
Log.d(LOGTAG, "Check " + selsub.toString());
Log.d(LOGTAG, "Check " + selectedSubjectList.toString());
Log.d(LOGTAG, "Result for if "
+ Arrays.asList(selsubdata).contains(Arrays.asList(selsub)));
if (selectedSubjectList.contains(Arrays.asList(selsub))) {
CustomToast.showCustomToast(this,
"Subject already present in list");
Log.d(LOGTAG,
"IN IF after TOAST " + selectedSubjectList.toString());
return;
}
else
Log.d(LOGTAG, "Showing subject not in list");
}
selsub
是 UnassignedSubjectData
的一个对象。
我在 LogCat 中的一个条件中得到以下内容:
Check History
Check [History, Science, Science, History]
Result for if false
Showing subject not in list
这意味着即使对象存在于 ArrayList
中,.contains()
运算符也无法正常工作。
请帮我找到解决方案。
最佳答案
首先,正如@LuiggiMendoza 指出的那样,调用
Arrays.asList(selsubdata).contains(Arrays.asList(selsub))
永远不会在这里返回 true,因为您要查找的是一个元素,而不是子列表。将其更改为:
Arrays.asList(selsubdata).contains(selsub)
第二, List#contains()
使用 equals()
用于比较的列表元素的方法。默认 equals()
继承自 Object
比较引用,这将无法按您的意愿工作。
对于 contains()
要为您的对象正常工作,您需要实现 equals()
(和 hashCode()
)对于 UnassignedSubjectData
.
hashCode()
实际上不需要比较,但它应该始终与 equals()
一起实现.
关于java - .contains() 运算符不适用于带对象的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16850524/