从ArrayList中删除一个对象

时间:2017-01-29 21:39:30

标签: java arrays string oop arraylist

这里的Java新手,只是无法理解数组。我需要从ArrayList中删除一个项目,我对如何实际编码而感到迷茫。我的程序读取.csv文件,从主类传递给第二个类一个字符串,一旦在第二个类中我需要搜索数组列表并删除该字符串(如果找到)并返回true表示已删除。任何帮助表示赞赏。

第二课

public class PersonLogImpl {

private boolean remove;
private boolean isLicenseUnique;
private boolean add;
private final ArrayList<Person> person;

public PersonLogImpl() {
    this.person = new ArrayList<>();
}


public ArrayList<Person> getPersonLog(){
    return Person;
}

public boolean add(Person obj){  //add person object to ordered list 
   person.add(obj);

   return add;
}

public boolean remove (String license){ //remove person with specific license from list

    if(person.remove(person.equals(add))){
            remove = true;
    }
   return remove;
}

编辑: 人类

public class Person{
private String licenseNumber;

public Person(){

}

public Person(String licenseNumber){
    this.licenseNumber = licenseNumber;
}

public String getLicenseNumber(){
    return licenseNumber;
}

public void setLicenseNumber(String licenseNumber){
    this.licenseNumber = licenseNumber;
}

@Override
public int hashCode(){
    int hash = 7;
    return hash;
}

@Override
public boolean equals(Object obj){
    if (this == obj){
        return true;
    }
    if (obj == null){
        return false;
    }
    if (getClass() != obj.getClass()){
        return false;
    }
    final Person other = (Person) obj;
    if (!Objects.equals(this.licenseNumber, other.licenseNumber)){
        return false;
    }
    return true;
}

@Override
public String toString(){
    return "Person{" + "licenseNumber=" + licenseNumber + '}';
}

public boolean validateLicense(){
    boolean retValue = false;
    if ((this.licenseNumber.matches("^[a-zA-Z]{2}\\d{7}$")))
        retValue = true;
    return retValue;
}

4 个答案:

答案 0 :(得分:1)

试试这个:

public boolean remove (String license){ //remove person with specific license from list
    Iterator<Person> personIterator = person.iterator();
    boolean remove = false;

    while(personIterator.hasNext(){
        Person personInstance = personIterator.next();  
        if(personInstance.getLicense().equals(license))){
            personIterator.remove();
            remove = true;
            break;
        }
    }

   return remove;
}

答案 1 :(得分:0)

如果还没有,请在getLicense()课程上创建方法Person。该方法应返回Person的许可证,然后您可以使用下面的remove方法;

编辑:我现在看到你的Person类有一个getLicenseNumber()方法。

public boolean remove(String license) {
   for (Person individual : person) { // go through each Person on the ArrayList
       if (individual.getLicenseNumber().equals(license)) // check if that Person's license is equal to the license we're looking for
           return person.remove(individual); // if so, remove that person and return true (remove will return true if the element is found)
   }

   return false; // if we never removed any element we never found a person with that license. In that case, return false
}

我假设每个人都有一个唯一的许可证号,并且您不会将相同的Person两次添加到ArrayList(或者会阻止用户尝试)。 如果您希望删除任何具有该许可证的人员,您可以使用以下方法:

public boolean remove(String license) {
    int listsize = person.size(); // size before removing any
    for(int i=0; i<person.size(); i++) {
        if (person.get(i).getLicenseNumber().equals(license))
            person.remove(i--); // i-- is required because the list size will change if we remove from it, so we need to decrement i
    }

    return !(listsize == person.size()); // if the size before is equal to the size now, we never removed any and thus return false
}

如果您想要更简单的解决方案,可以查看method removeAll from ArrayList class

答案 2 :(得分:0)

您的代码中有一些错误,我在下面的评论中突出显示了这些错误:

a[3]

答案 3 :(得分:0)

@ Newb2Java,equals方法可以在这种情况下将person与任何对象进行比较,但是如果参数(此处为add)与调用者的类型不同( person),结果为false。虽然你使用了单数名词person,但它的类型是复数,是Person s的集合。 ArrayList<Person>永远不会等于Boolean(也不是boolean)。 List方法add将返回true。如果remove实际删除了必须属于true类型的参数,Person将返回License。首先,您必须找到列表中的哪个元素具有指示的属性值。所以你必须遍历列表,使用迭代器是最好的方法,直到找到具有给定package practice; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class Personator { private final List<Person> persons = new ArrayList<>(); public List<Person> getPersons() { return new ArrayList<>(persons); } public boolean add(Person person) { return persons.add(person); } public boolean remove(String license) { return remove(new Person(license)); } public boolean remove(Person removal) { boolean wasRemoved = false; for (ListIterator<Person> iterator = persons.listIterator(persons.size()); iterator.hasPrevious(); ) { final Person person = iterator.previous(); if (removal.equals(person)) { iterator.remove(); wasRemoved = true; } } return wasRemoved; } } 的元素的每个实例。像这样:

public class Person {
  private final String license;

  public Person(String license) {
    if (license == null) {
      throw new IllegalArgumentException("null license not allowed");
    }
    this.license = license;
  }

  public String getLicense() {
    return license;
  }

  @Override
  public String toString() {
    return "Person " + getLicense();
  }

  @Override
  public int hashCode() {
    return getLicense().hashCode();
  }

  @Override public boolean equals(Object oth) {
    if (this == oth) {
      return true;
    }
    if (! (oth instanceof Person)) {
      return false;
    }
    Person other = (Person) oth;
    return this.getLicense().equals(other.getLicense());
  }
}

用这个:

foreach($fighters1 as $index => $fighter) {
    $fighter2 = $fighters2[$index];
    //do what you need to do with $fighter and $fighter2
}