Java 使用一个方法循环ArrayList
有人能帮我缩短这段代码吗?只需使用deleteFromList()和increaseAge()都可以使用的列表中的一个循环即可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
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我认为问题只是如何减少代码重复。