jd2050
jd2050

Reputation: 302

List iteration & setting values with Java 8 Streams API

I'm trying to understand how to use the Java 8 Streams API.

For example, I have these two classes:

public class User {
    private String name;
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

public class UserWithAge {
    private String name;
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    private int age;
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

I have a List<User> of ten users, and I want to convert this to a List<UserWithAge> of ten users with the same names and with a constant age (say, 27). How can I do that using the Java 8 Streams API (without loops, and without modifying the above classes)?

Upvotes: 4

Views: 18058

Answers (3)

vishal thakur
vishal thakur

Reputation: 657

public class ListIteratorExp {

    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        Person p1 = new Person();
        p1.setName("foo");

        Person p2 = new Person();
        p2.setName("bee");

        list.add(p1);
        list.add(p2);

        list.stream().forEach(p -> {
            String name = p.getName();
            System.out.println(name);
        });
    }

}
class Person{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
output:-
vishal
thakur

Upvotes: 0

WannaBeCoder
WannaBeCoder

Reputation: 1282

While you could do this, You should not do like this.

List<UserWithAge> userWithAgeList = new ArrayList<UserWithAge>();

userList.stream().forEach(user -> {
                UserWithAge userWithAge = new UserWithAge();
                userWithAge.setName(user.getName());
                userWithAge.setAge(27);
                userWithAgeList.add(userWithAge);
});

Upvotes: 2

Floern
Floern

Reputation: 33904

You could use the map() feature of the stream to convert each User instance in your list to a UserWithAge instance.

List<User> userList = ... // your list

List<UserWithAge> usersWithAgeList = userList.stream()
        .map(user -> {
                // create UserWithAge instance and copy user name
                UserWithAge userWithAge = new UserWithAge();
                userWithAge.setName(user.getName());
                userWithAge.setAge(27);
                return userWithAge;
         })
         .collect(Collectors.toList()); // return the UserWithAge's as a list

Upvotes: 7

Related Questions