6

How to create a List from Java Objects or Records

 8 months ago
source link: https://www.mastertheboss.com/java/how-to-create-a-list-from-java-objects-or-records/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

In Java, working with collections like lists is fundamental. Often, you’ll need to convert objects or records into lists for various purposes. In this tutorial, we’ll explore different approaches to create a List from a property of an Array of Java objects or Records using practical examples.

From an Array of Java Objects to a List

Sometimes you will need to extract a single property from an Array of Java Objects and convert into a Collection such as the

java.util.List

java.util.List. In our first example, we will show two simple ways to achieve it by using just a one-liner and a bit of Lambda functional programming.

Firstly, let’s define the following Java Bean:

class CustomerDTO {
private String username;
private String password;
public CustomerDTO(String username, String password) {
this.username = username;
this.password = password;
public String getUsername() {
return username;
public void setUsername(String username) {
this.username = username;
public String getPassword() {
return password;
public void setPassword(String password) {
this.password = password;
class CustomerDTO {
    private String username;
    private String password;

    public CustomerDTO(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

Then, let’s create an array of

CustomerDTO

CustomerDTO objects as follows:

CustomerDTO[] customersDTO = {
new CustomerDTO("user1", "password1"),
new CustomerDTO("user2", "password2"),
new CustomerDTO("user3", "password3"),
new CustomerDTO("user4", "password4"),
new CustomerDTO("user5", "password5")
CustomerDTO[] customersDTO = {
    new CustomerDTO("user1", "password1"),
    new CustomerDTO("user2", "password2"),
    new CustomerDTO("user3", "password3"),
    new CustomerDTO("user4", "password4"),
    new CustomerDTO("user5", "password5")
};

In this following code snippet, we will show how to create a List from the array of CustomerDTO using Java Streams. Specifically, the map operation transforms objects into specific fields, followed by collecting them into lists using Collectors.toList().

List<String> list = Arrays.stream(customersDTO)
.map(customer -> customer.getUsername())
.collect(Collectors.toList());
List<String> list = Arrays.stream(customersDTO)
      .map(customer -> customer.getUsername())
          .collect(Collectors.toList());

In the above code, the List object will contain all

CustomerDTO

CustomerDTO username attributes.

Please note that the above can also be rewritten in a slightly different format, without changing the result:

List<String> list2 = Arrays.asList(customersDTO)
.stream()
.map(CustomerDTO::getUsername)
.collect(Collectors.toList());
List<String> list2 = Arrays.asList(customersDTO)
     .stream()
        .map(CustomerDTO::getUsername)
          .collect(Collectors.toList());

From an Array of Records to a Java List

The second use case we will showcase is different as it uses a Java Record to store the Customer array of data:

record Customer(String username, String password) {
// Additional methods or customizations can be added here if needed
record Customer(String username, String password) {
    // Additional methods or customizations can be added here if needed
}

Thanks to the magic features of Java Record, you will get out of the box a Constructor with fields for the above Record. Therefore, you can create an Array of Customer records as follows:

Customer[] customers = {
new Customer("user1", "password1"),
new Customer("user2", "password2"),
new Customer("user3", "password3"),
new Customer("user4", "password4"),
new Customer("user5", "password5")
Customer[] customers = {
    new Customer("user1", "password1"),
    new Customer("user2", "password2"),
    new Customer("user3", "password3"),
    new Customer("user4", "password4"),
    new Customer("user5", "password5")
};

Then, in order to extract the array of username from the Record into a Java List, you will need to change a bit our previous examples:

List<String> list3 = Arrays.stream(customers)
.map(customer -> customer.username())
.collect(Collectors.toList());
List<String> list4 = Arrays.asList(customers)
.stream()
.map(Customer::username)
.collect(Collectors.toList());
List<String> list3 = Arrays.stream(customers)
    .map(customer -> customer.username())
    .collect(Collectors.toList());
    
 List<String> list4 = Arrays.asList(customers)
    .stream()
    .map(Customer::username)
    .collect(Collectors.toList());

As you can see, you will not access the Java Record with the

getUserName

getUserName anymore but using the built-in

customer.username()

customer.username().

From a List of Records to another List of Records

Finally, we will show case how to copy a List of Java Records into another List of Java Records. Commonly, this use case can happen if you want to transform a complex Record into a smaller one. You can achieve it in multiple ways: here we will show how to copy some fields from a List of the

CustomerFull

CustomerFull Record into the fields of a

Customer

Customer Record we already know.

Firstly, let’s add the new

CustomerFull

CustomerFull Record:

record CustomerFull(String username, String password, String email, String address) {
// Additional methods or customizations can be added here if needed
record CustomerFull(String username, String password, String email, String address) {
    // Additional methods or customizations can be added here if needed
}

Then, let’s init some elements of this Record with:

List<CustomerFull> customerFullList = List.of(
new CustomerFull("user1", "pass1", "email1", "address1"),
new CustomerFull("user2", "pass2", "email2", "address2")
List<CustomerFull> customerFullList = List.of(
    new CustomerFull("user1", "pass1", "email1", "address1"),
    new CustomerFull("user2", "pass2", "email2", "address2")
 
);

Finally, we will copy the List of

CustomerFull

CustomerFull into a List of

Customer

Customer objects, picking up only the attributes that we’re interested in:

List<Customer> customerList = customerFullList.stream()
.map(full -> new Customer(full.username(), full.password()))
.collect(Collectors.toList());
List<Customer> customerList = customerFullList.stream()
    .map(full -> new Customer(full.username(), full.password()))
    .collect(Collectors.toList());

Conclusion

In summary, converting an array of Java objects or records into a list is a common task in Java programming. This article has explored several efficient approaches to achieve this conversion using Lambda expressions


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK