这里的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;
}
答案 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
}