0

我有两个arrayLists readAllNames,另一个是selectedNames.现在我想获得另一个有unSelectedNames.ex的列表。

List<Name>readAllNames = {"a","b","c","d","e","f","g"};
List<Name>selectedNames = {"a","b"};

我怎样才能得到: unSelectedNames{"c","d","e","f","g"} 从readAllNames

不使用remove()AndremoveAll()

4

6 回答 6

3
List<String> unread = new ArrayList<String>();
for(String s : readAllNames ){
    if(!selectedNames.contains(s))
        unread.add(s);
}
于 2013-02-01T12:51:26.530 回答
2

如果你不想使用remove()/removeAll()你总是可以遍历readAllNames每个元素并检查它是否被contains()'ed inselectedNames和如果没有添加到unselectedNames.

但你真的应该使用removeAll(); 向我们展示您的Name课程,我们可能会告诉您出了什么问题(提示:阅读equals()hashCode()语义wrt。Collection操作。)

干杯,

于 2013-02-01T12:50:48.337 回答
0
ArrayList<Name> unselectedName = new ArrayList<String>();
for(Name s: readAllNames){
    if(!selectedNames.contains(s)){
        unselectedName.add(s);
    }
}
于 2013-02-01T12:57:14.737 回答
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);
于 2013-02-01T13:11:50.967 回答
0

为什么不看一下源代码remove()并使用它呢?

于 2013-02-01T12:46:24.793 回答
0

尝试这个:

List<String> unSelectedNames = new ArrayList<String>(readAllNames);
unSelectedNames.removeAll(selectedNames);

您不必触摸原件List,只需触摸它的副本。

于 2013-02-01T13:02:26.603 回答