Can we pass List to object in Java?

Part 4

  • You can add objects to a list
  • You can go through objects in a list

The type parameter used in creating a list defines the type of the variables that are added to the list. For instance, ArrayList includes strings, ArrayList integers, and ArrayList floating point numbers

In the example below we first add strings to a list, after which the strings in the list are printed one by one.

ArrayList<String> names = new ArrayList<>(); // string can first be stored in a variable String name = "Betty Jennings"; // then add it to the list names.add(name); // strings can also be directly added to the list: names.add("Betty Snyder"); names.add("Frances Spence"); names.add("Kay McNulty"); names.add("Marlyn Wescoff"); names.add("Ruth Lichterman"); // several different repeat statements can be // used to go through the list elements // 1. while loop int index = 0; while (index < names.size()) { System.out.println(names.get(index)); index = index + 1; } // 2. for loop with index for (int i = 0; i < names.size(); i++) { System.out.println(names.get(i)); } System.out.println(); // 3. for each loop (no index) for (String name: names) { System.out.println(name); }

Betty Jennings Betty Snyder Frances Spence Kay McNulty Marlyn Wescoff Ruth Lichterman

Betty Jennings Betty Snyder Frances Spence Kay McNulty Marlyn Wescoff Ruth Lichterman

Betty Jennings Betty Snyder Frances Spence Kay McNulty Marlyn Wescoff Ruth Lichterman

Strings are objects, so it should come as no surprise that other kinds of objects can also be found in lists. Next, let's examine the cooperation of lists and objects in more detail.

Let's assume we have access to the class defined below, describing a person.

public class Person { private String name; private int age; private int weight; private int height; public Person(String name) { this.name = name; this.age = 0; this.weight = 0; this.height = 0; } public String getName() { return this.name; } public int getAge() { return this.age; } public void growOlder() { this.age = this.age + 1; } public void setHeight(int newHeight) { this.height = newHeight; } public void setWeight(int newWeight) { this.weight = newWeight; } public double bodyMassIndex() { double heightDivByHundred = this.height / 100.0; return this.weight / (heightDivByHundred * heightDivByHundred); } @Override public String toString() { return this.name + ", age " + this.age + " years"; } }

Handling objects in a list is not really different in any way from the previous experience we have with lists. The essential difference is only to define the type for the stored elements when you create the list.

In the example below we first create a list meant for storing Person type object, after which we add persons to it. Finally the person objects are printed one by one.

ArrayList<Person> persons = new ArrayList<>(); // a person object can be created first Person john = new Person("John"); // and then added to the list persons.add(john); // person objects can also be created "in the same sentence" that they are added to the list persons.add(new Person("Matthew")); persons.add(new Person("Martin")); for (Person person: persons) { System.out.println(person); }

John, age 0 years Matthew, age 0 years Martin, age 0 years

The structure we used earlier for reading inputs is still very useful.

Scanner scanner = new Scanner(System.in); ArrayList<Person> persons = new ArrayList<>(); // Read the names of persons from the user while (true) { System.out.print("Enter a name, empty will stop: "); String name = scanner.nextLine(); if (name.isEmpty()) { break; } // Add to the list a new person // whose name is the previous user input persons.add(new Person(name)); } // Print the number of the entered persons, and their individual information System.out.println(); System.out.println("Persons in total: " + persons.size()); System.out.println("Persons: "); for (Person person: persons) { System.out.println(person); }

Enter a name, empty will stop: Alan Kay Enter a name, empty will stop: Ivan Sutherland Enter a name, empty will stop: Kristen Nygaard

Persons in total: 3 Persons: Alan Kay, age 0 years Ivan Sutherland, age 0 years Kristen Nygaard, age 0 years

If the constructor demands more than one parameter, you can query the user for more information. Let's assume we have the following constructor for the class Person.

public class Person { private String name; private int age; private int weight; private int height; public Person(String name, int age) { this.name = name; this.age = age; this.weight = 0; this.height = 0; } // methods }

In this case, an object is created by calling the two-parameter constructor.

If we want to query the user for this kind of object, they must be asked for each parameter separately. In the example below, name and age parameters are asked separately from the user. Entering an empty name will end the reading part.

The persons are printed after they have been read.

Scanner scanner = new Scanner(System.in); ArrayList<Person> persons = new ArrayList<>(); // Read person information from the user while (true) { System.out.print("Enter name, empty will end: "); String name = scanner.nextLine(); if (name.isEmpty()) { break; } System.out.print("Enter the age of the person " + name + ": "); int age = Integer.valueOf(scanner.nextLine()); // We add a new person to the list. // The person's name and age were decided by the user persons.add(new Person(name, age)); } // We'll print the number of the inputted persons, and the persons themselves System.out.println(); System.out.println("Total number of persons: " + persons.size()); System.out.println("Persons: "); for (Person person: persons) { System.out.println(person); }

Enter name, empty will end: Grace Hopper Enter the age of the person Grace Hopper: 85 Enter name, empty will end:

Total number of persons: 1 Persons: Grace Hopper, age 85 years

In the example and exercise below, the required information was entered line by line. By no means is it impossible to ask for input in a specific format, e.g. separated by a comma.

If the name and age were separated by a comma, the program could work in the following manner.

Scanner scanner = new Scanner(System.in); ArrayList<Person> persons = new ArrayList<>(); // Read person information from the user System.out.println("Enter the person details separated by a comma, e.g.: Randall,2"); while (true) { System.out.print("Enter the details, empty will stop: "); String details = scanner.nextLine(); if (details.isEmpty()) { break; } String[] parts = details.split(","); String name = parts[0]; int age = Integer.valueOf(parts[1]); persons.add(new Person(name, age)); } // Print the number of the entered persons, and the persons themselves System.out.println(); System.out.println("Total number of persons: " + persons.size()); System.out.println("Persons: "); for (Person person: persons) { System.out.println(person); }

Enter the person details separated by a comma, e.g.: Randall,2 Enter the details, empty will stop: Leevi,2 Enter the details, empty will stop: Anton,2 Enter the details, empty will stop: Sylvi,0 Enter the details, empty will stop:

Total number of persons: 3 Persons: Leevi, age 2 years Anton, age 2 years Sylvi, age 0 years

You can also examine the objects on the list as you go through it. In the example below, we first ask the user for an age restriction, after which we print all the objects whose age is at least the number given by the user.

// Assume we have a 'persons' list // that consists of person objects System.out.print("What is the age limit? "); int ageLimit = Integer.valueOf(scanner.nextLine()); for (Person person: persons) { if (person.getAge() >= ageLimit) { System.out.println(person); } }

You have reached the end of this section! Continue to the next section:

Remember to check your points from the ball on the bottom-right corner of the material!