今天我有一个比昨天更愚蠢的问题,但我真的不明白为什么我的代码不起作用。
代码如下:
public class A{
List fileList;
public A(List fl){
fileList = new ArrayList<String>;
if(fl != null) {
fileList = fl;
}
}
public void removeFiles(List fl){
for(Object obj : fl) {
fileList.remove(obj.toString());
}
}
}
我尝试使用Iterator
在网络上找到的所有内容,但没有删除任何文件,也没有出现错误或异常!
更多代码
public class CoordinationServer extends Activatable implements CoordinationSerInt
{
List<CoordObj> userList;
public int updateFileList(String username, List files, int option) throws RemoteException{
for (CoordObj anUserList : userList) {
if (anUserList.getUsername().equals(username)) {
if(option == 0){
anUserList.setFileList(files);
return 1;
}else if(option == 1){
anUserList.addFilesToList(files);
return 1;
}else if(option == 2){
anUserList.removeFiles(files);
return 1;
}
return 0;
}
}
return -1;
}
}
public class CoordObj implements Serializable
{
UserForUser userReference;
List fileList;
String username;
public CoordObj(UserForUser ur, List fl, String un) {
userReference = ur;
fileList = new ArrayList<String>();
if(fl != null)
fileList = fl;
username = un;
}
public void removeFiles(List fl){
this.fileList.removeAll(fl);
}
}
分辨 如果其他人有这个问题,我就这样解决了:
fileList.removeAll(Arrays.asList(fl.toArray()));
答案 0 :(得分:9)
你正在调用对象toString()方法,不要这样做。只需使用object itself。
for(Object obj:fl){
fileList.remove(obj);
}
哪个会删除btw列表中的所有内容,因此您可以执行clear()。
答案 1 :(得分:3)
这是错误的
fileList = new ArrayList<String>;
将此更改为
fileList = new ArrayList<String>();
答案 2 :(得分:0)
它不会抛出错误或异常。根据{{3}},可以选择投掷ClassCastException
,List
不会投掷。它还声明&#34; ..如果此列表不包含该元素,则不会更改...&#34; 。因此,该操作基本上是无操作。
使用fileList.removeAll(fl)
删除要从fileList
删除的所有内容。不需要循环。如果更改removeAll
,则true
会返回fileList
,因此您可以检查操作是否成功。
答案 3 :(得分:0)
当您宣布列出String
类型时,您可以这样做:
fileList = new ArrayList<String>();
for(String str : fl){
fileList.remove(str);
}