我有两个数组列表readAllNames
而另一个列表是selectedNames
。现在我想获得另一个包含unSelectedNames
.ex。
List<Name>readAllNames = {"a","b","c","d","e","f","g"};
List<Name>selectedNames = {"a","b"};
如何从unSelectedNames
获取readAllNames
{“c”,“d”,“e”,“f”,“g”}?
不使用remove()
和removeAll()
答案 0 :(得分:3)
List<String> unread = new ArrayList<String>();
for(String s : readAllNames ){
if(!selectedNames.contains(s))
unread.add(s);
}
答案 1 :(得分:2)
如果您不想使用remove()
/ removeAll()
,则可以一直遍历readAllNames
并对每个元素检查contains()
是否在{selectedNames
1}}如果没有将其添加到unselectedNames
。
但你真的应该使用removeAll()
;向我们展示你的Name
课程,我们可能会告诉你什么是错的(提示:阅读equals()
和hashCode()
语义wrt。Collection
操作。)
干杯,
答案 2 :(得分:0)
为什么不查看remove()
的源代码并使用它?
答案 3 :(得分:0)
ArrayList<Name> unselectedName = new ArrayList<String>();
for(Name s: readAllNames){
if(!selectedNames.contains(s)){
unselectedName.add(s);
}
}
答案 4 :(得分:0)
试试这个:
List<String> unSelectedNames = new ArrayList<String>(readAllNames);
unSelectedNames.removeAll(selectedNames);
您无需触及原始List
,只需触摸该副本即可。
答案 5 :(得分:0)
试试这个
List<Name>readAllNames = {"a","b","c","d","e","f","g"};
List<Name>selectedNames = {"a","b"};
List<Name>unselectedNames = null;
Collections.copy(unselectedNames , readAllNames);
unselectedNames.removeAll(selectedNames);