Home > Software design >  How can I dynamically set the array object to java object
How can I dynamically set the array object to java object

Time:02-08

I am new to java and I am stuck at one place. I am taking xml request which is coming in array.

<PassengersDetails>
 <Passenger>
  <passesngerName>ABC</passesngerName>
  <passengerAge>25</passengerAge>
 </Passenger>
 <Passenger>
  <passesngerName>DEF</passesngerName>
  <passengerAge>28</passengerAge>
 </Passenger>
 <Passenger>
  <passesngerName>GHI</passesngerName>
  <passengerAge>48</passengerAge>
 </Passenger>
 <Passenger>
  <passesngerName>KLM</passesngerName>
  <passengerAge>18</passengerAge>
 </Passenger>
</PassengersDetails>

My xml object is getting turned into array like below.

Passenger [] passenger= passengersDetails.getPassenger();

And my java object looks like

class Passenger {
passengerName1;
passengerAge1;
passengerName2;
passengerAge2;
passengerName3;
passengerAge3;
passengerName4;
passengerAge4;
}

with setter and getter.

I wanted to set all the data from array in java object. I am able to set it individually after checking if array is preset or not.

if(arr[0] != null){
setPassengerName1 = arr[0].getPassengerName;
setPassengerAge1 = arr[0].getPassengerAge;
}
if(arr[1] != null){
setPassengerName2 = arr[1].getPassengerName;
setPassengerAge2 = arr[1].getPassengerAge;
}....

How can I set passenger array into Passenger java object mentioned above.

But I wanted to know if there is any other way we can do this dynamically as we can get 0 or max 4 passenger elements in array. Something like in the same loop and setting it dynamically.

CodePudding user response:

Create a model class Passenger to hold the name and age only. Then you create an array that holds Passenger objects.

You then use:

getResources().getString(getResources().getIdentifier("propertyName", "string", getPackageName()))

to iterate through string resources, given you know how many passengers there are.

CodePudding user response:

But I wanted to know if there is any other way we can do this dynamically as we can get 0 or max 4 passenger elements in array.

Either:

  • Start with one size of array, such as ten. As you place objects into the elements of the array, keep count. As you reach the limits of the array, create a new bigger array. Copy over from old array to new array. Discard old array. Repeat until done.
  • Use a List implementation such as ArrayList.

Using a list.

List< Person > persons = new ArrayList<>() ;

Define a record class to represent each person. You can declare the record as a separate class, a nested class, or as a local class (within a method).

record Person ( String name , int age ) {}

Add each person.

Person person = new Person( "Bob" , 42 ) ;
persons.add( person ) ;

When done, you may want to make an unmodifiable list to replace the modifiable one.

persons = List.of( persons ) ;
  •  Tags:  
  • Related