首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从ArrayList中删除特定的bean对象?

如何从ArrayList中删除特定的bean对象?
EN

Stack Overflow用户
提问于 2014-07-05 19:58:18
回答 2查看 3.4K关注 0票数 0

我想从ArrayList中删除特定的bean对象。我使用 remove removeAll方法从ArrayList中删除对象元素,而不是删除元素。

例如,假设下面的代码,

代码语言:javascript
运行
复制
ArrayList<SystemDetailData> systemDetails = new ArrayList<SystemDetailData>();
SystemDetailData data = new SystemDetailData();
data.setId("1");
data.setName("abc");
data.setHost("192.168.1.2");
systemDetails.add(data);

data = new SystemDetailData();
data.setId("2");
data.setName("asd");
data.setHost("192.168.1.45");
systemDetails.add(data);
System.out.println("Before remove : " + systemDetails);

ArrayList<SystemDetailData> systemDetail = new ArrayList<SystemDetailData>();
SystemDetailData data = new SystemDetailData();
data.setId("1");
data.setName("abc");
data.setHost("192.168.1.2");
systemDetail.add(data);
System.out.println("Old data :" + systemDetail);

//Remove object from arraylist - method1
systemDetails.removeAll(systemDetail);


//Remove object from arraylist - method2
systemDetails.removeAll(systemDetail.getId());
systemDetails.removeAll(systemDetail.getName());
systemDetails.removeAll(systemDetail.getHost());
System.out.println("After remove : "+systemDetails);

豆类:

代码语言:javascript
运行
复制
public class SystemDetailData extends BusinessData {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private static final String DOMAIN_NAME = "domainName";
private static final String HOST_NAME = "hostName";
private static final String USER_NAME = "userName";
private static final String PASSWORD = "password";
private static final String INDEX = "index";

private BigInteger index;
private String domainName;
private String hostName;
private String userName;
private String password;


public BigInteger getIndex() {
    return (BigInteger) get (INDEX);
}

public void setIndex(BigInteger index) {
    set (INDEX, index);
    this.index = index;
}

public String getDomainName() {
    return (String) get(DOMAIN_NAME).toString();
}

public void setDomainName(String domainName) {
    set (DOMAIN_NAME, domainName);
    this.domainName = domainName;
}

public String getHostName() {
    return (String) get (HOST_NAME);
}

public void setHostName(String hostName) {
    set (HOST_NAME, hostName);
    this.hostName = hostName;
}

public String getUserName() {
    return (String) get (USER_NAME);
}

public void setUserName(String userName) {
    set (USER_NAME, userName);
    this.userName = userName;
}

public String getPassword() {
    return (String) get (PASSWORD);
}

public void setPassword(String password) {
    set (PASSWORD, password);
    this.password = password;
}

@Override
public String toString() {
    return "SystemDetailData [index=" + index + ", domainName="
            + domainName + ", hostName=" + hostName + ", userName="
            + userName + ", password=" + password + "]";
}

@Override
public String getKeyValue() {
    String value = "";
    if (index != null) {
        value = value + "INDEX =" + index + ";";
    }
    if (domainName != null) {
        value = value + "DOMAIN_NAME =" + domainName + ";";
    }
    if (userName != null) {
        value = value + "USER_NAME =" + userName + ";";
    }
    if (hostName != null) {
        value = value + "HOST_NAME =" + hostName + ";";
    }
    if (password != null) {
        value = value + "PASSWORD =" + password + ";";
    }
    return value;
}


}

我的产出低于:

代码语言:javascript
运行
复制
Before remove : [SystemDetailData [index=1, Name=abc, host=192.168.1.2], SystemDetailData [index=2, Name=asd, host=192.168.1.45]]
Old data : [SystemDetailData [index=1, Name=abc, host=192.168.1.2]]

After remove : [SystemDetailData [index=1, Name=abc, host=192.168.1.2], SystemDetailData [index=2, Name=asd, host=192.168.1.45]]

我希望产出低于:

代码语言:javascript
运行
复制
After remove : [SystemDetailData [index=2, Name=asd, host=192.168.1.45]]
EN

回答 2

Stack Overflow用户

发布于 2014-07-05 20:04:04

如果SystemDetailData类必须实现哈希代码和等于方法。若要扩展我的答案,请在java中从集合中删除对象。Java检查要删除的对象是否在此集合中(如果collection包含与我们要删除的对象相等的对象)。它使用相等的方法。因此,我们必须告诉Java什么是相同的对象:它可以具有相同的名称、相同的id或其他属性(属性)。这就是为什么我们必须实现相等(和hashcode)的原因。

票数 3
EN

Stack Overflow用户

发布于 2014-07-05 20:56:57

您的SystemDetailData类需要实现一个等于方法。当您在ArrayList上调用remove时,代码正在执行如下操作:

代码语言:javascript
运行
复制
ArrayList<SystemDetailData> items;
void remove(SystemDetailData itemToRemove) {
    for ( int i = 0; i < items.size() ++i ) {
        if ( items.get(i).equals(itemToRemove) ) {
            items.remove(i);
            break;
        }
    }
}

他是这样的,除非equals方法对要传递给remove方法的项和集合中的一个项返回true,否则不会删除任何内容。

您需要确切地决定equals方法应该是什么样子,但是,如果两个项目相同,如果ids相同,那么只需向SystemDetailData添加一个方法,例如:

代码语言:javascript
运行
复制
public boolean equals(Object other) {
    SystemDetailData otherData = (SystemDetailData)other;
    return otherData.getId() == this.getId();
}

显然,您需要添加对null、其他类型等的检查,但这会让您了解该方法需要什么样的外观。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24590098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档