我怎样才能获得未选元素的列表?

时间:2013-02-01 12:43:57

标签: java list

我有两个数组列表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()

6 个答案:

答案 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);