Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用一个方法循环ArrayList_Java_Loops_Arraylist - Fatal编程技术网

Java 使用一个方法循环ArrayList

Java 使用一个方法循环ArrayList,java,loops,arraylist,Java,Loops,Arraylist,有人能帮我缩短这段代码吗?只需使用deleteFromList()和increaseAge()都可以使用的列表中的一个循环即可 private void deleteFromList() { System.out.println("Type the name of the person you want to delete: "); String nameOfPerson = keyboard.nextLine(); for (int i = 0; i < allP

有人能帮我缩短这段代码吗?只需使用deleteFromList()和increaseAge()都可以使用的列表中的一个循环即可

private void deleteFromList() {
    System.out.println("Type the name of the person you want to delete: ");
    String nameOfPerson = keyboard.nextLine();
    for (int i = 0; i < allPersons.size(); i++) {
        if (allPersons.get(i).getName().equalsIgnoreCase(nameOfPerson)) {
            allPersons.remove(i);
            System.out.println("The person has been deleted!");
        }
    }
}


private void increaseAge() {
    System.out.println("Type in the persons name: ");
    String nameOfPerson = keyboard.nextLine();
    for (int i = 0; i < allPersons.size(); i++) {
        if (allPersons.get(i).getName().equalsIgnoreCase(nameOfPerson)) {
            Person person = allPersons.get(i);
            person.setAge();
            System.out.println("Persons age have been changed");
        }
    }
}
private void deleteFromList(){
System.out.println(“键入要删除的人的姓名:”;
字符串名称person=keyboard.nextLine();
对于(int i=0;i
如果我理解正确,您希望避免两种方法之间重复的迭代和比较逻辑。好消息是,如果您使用的是Java 8,则根本不需要循环:

private void deleteFromList() {
    System.out.println("Type the name of the person you want to delete: ");
    String nameOfPerson = keyboard.nextLine();
    allPersons.removeIf(p -> p.getName().equalsIgnoreCase(nameOfPerson));
}

private void increaseAge() {
    System.out.println("Type in the persons name: ");
    String nameOfPerson = keyboard.nextLine();
    allPersons.stream()
            .filter(p -> p.getName().equalsIgnoreCase(nameOfPerson))
            .forEach(Person::setAge);
}

也许像下面这样的东西能帮上忙?可能应该优化名称;-) 使用通用方法
handlePerson
,以便在需要时输入特定的消费者

public void handlePerson(String personName, Consumer<Person> personConsumer) {
    allPersons.stream()
        .filter(p -> p.getName().equalsIgnoreCase(personName))
        .forEach(personConsumer);
}


public void increaseAge() {
    System.out.println("Type in the persons name: ");
    handlePerson(keyboard.nextLine(), Person::setAge));
    // or if you really want to do it all in the consumer:
    handlePerson(keyboard.nextLine(), p -> { 
        p.setAge(); 
        System.out.println("Persons age have been changed");
    });
}

public void deletePerson() {
    System.out.println("Type in the persons name: ");
    String personName = keyboard.nextLine();
    // of course no way to handle deletion via consumer ;-)
    if (allPersons.removeIf(p -> p.getName().equalsIgnoreCase(personName))) {
        System.out.println("The person has been deleted!");
    }

}
public void handlePerson(字符串personName,消费者personConsumer){
allPersons.stream()
.filter(p->p.getName().equalsIgnoreCase(personName))
.forEach(个人消费者);
}
公共无效增量(){
System.out.println(“输入人名:”);
handlePerson(keyboard.nextLine(),Person::setAge));
//或者,如果您真的想在消费者中完成这一切:
handlePerson(keyboard.nextLine(),p->{
p、 设置();
System.out.println(“人员年龄已更改”);
});
}
公众人士(){
System.out.println(“输入人名:”);
字符串personName=keyboard.nextLine();
//当然,无法通过消费者处理删除;-)
if(allPersons.removeIf(p->p.getName().equalsIgnoreCase(personName))){
System.out.println(“此人已被删除!”);
}
}

如果您更频繁地使用
p.getName().equalsIgnoreCase(personName)
,您可能还需要引入一个单独的
谓词。

如果输入的名称在删除和增加年龄时都相同,那么会发生什么情况?@TimBiegeleisen我认为问题只是如何减少代码重复。