Java 8 Streams map() examples

In Java 8, stream().map() lets you convert an object to something else. Review the following examples :

1. A List of Strings to Uppercase

1.1 Simple Java example to convert a list of Strings to upper case.

TestJava8.java

package com.mkyong.java8;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class TestJava8 {

    public static void main(String[] args) {

        List<String> alpha = Arrays.asList("a", "b", "c", "d");

        //Before Java8
        List<String> alphaUpper = new ArrayList<>();
        for (String s : alpha) {
            alphaUpper.add(s.toUpperCase());
        }

        System.out.println(alpha); //[a, b, c, d]
        System.out.println(alphaUpper); //[A, B, C, D]

        // Java 8
        List<String> collect = alpha.stream().map(String::toUpperCase).collect(Collectors.toList());
        System.out.println(collect); //[A, B, C, D]

        // Extra, streams apply to any data type.
        List<Integer> num = Arrays.asList(1,2,3,4,5);
        List<Integer> collect1 = num.stream().map(n -> n * 2).collect(Collectors.toList());
        System.out.println(collect1); //[2, 4, 6, 8, 10]

    }

}

2. List of objects -> List of String

2.1 Get all the name values from a list of the staff objects.

Staff.java

package com.mkyong.java8;

import java.math.BigDecimal;

public class Staff {

    private String name;
    private int age;
    private BigDecimal salary;
	//...
}
TestJava8.java

package com.mkyong.java8;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class TestJava8 {

    public static void main(String[] args) {

        List<Staff> staff = Arrays.asList(
                new Staff("mkyong", 30, new BigDecimal(10000)),
                new Staff("jack", 27, new BigDecimal(20000)),
                new Staff("lawrence", 33, new BigDecimal(30000))
        );

        //Before Java 8
        List<String> result = new ArrayList<>();
        for (Staff x : staff) {
            result.add(x.getName());
        }
        System.out.println(result); //[mkyong, jack, lawrence]

        //Java 8
        List<String> collect = staff.stream().map(x -> x.getName()).collect(Collectors.toList());
        System.out.println(collect); //[mkyong, jack, lawrence]

    }

}

3. List of objects -> List of other objects

3.1 This example shows you how to convert a list of staff objects into a list of StaffPublic objects.

Staff.java

package com.mkyong.java8;

import java.math.BigDecimal;

public class Staff {

    private String name;
    private int age;
    private BigDecimal salary;
	//...
}

StaffPublic.java

package com.mkyong.java8;

public class StaffPublic {

    private String name;
    private int age;
    private String extra;
    //...
}


3.2 Before Java 8.

BeforeJava8.java

package com.mkyong.java8;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class BeforeJava8 {

    public static void main(String[] args) {

        List<Staff> staff = Arrays.asList(
                new Staff("mkyong", 30, new BigDecimal(10000)),
                new Staff("jack", 27, new BigDecimal(20000)),
                new Staff("lawrence", 33, new BigDecimal(30000))
        );

        List<StaffPublic> result = convertToStaffPublic(staff);
        System.out.println(result);

    }

    private static List<StaffPublic> convertToStaffPublic(List<Staff> staff) {

        List<StaffPublic> result = new ArrayList<>();

        for (Staff temp : staff) {

            StaffPublic obj = new StaffPublic();
            obj.setName(temp.getName());
            obj.setAge(temp.getAge());
            if ("mkyong".equals(temp.getName())) {
                obj.setExtra("this field is for mkyong only!");
            }

            result.add(obj);
        }

        return result;

    }

}

Output


[
	StaffPublic{name='mkyong', age=30, extra='this field is for mkyong only!'}, 
	StaffPublic{name='jack', age=27, extra='null'}, 
	StaffPublic{name='lawrence', age=33, extra='null'}
]

3.3 Java 8 example.

NowJava8.java

package com.mkyong.java8;

package com.hostingcompass.web.java8;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class NowJava8 {

    public static void main(String[] args) {

        List<Staff> staff = Arrays.asList(
                new Staff("mkyong", 30, new BigDecimal(10000)),
                new Staff("jack", 27, new BigDecimal(20000)),
                new Staff("lawrence", 33, new BigDecimal(30000))
        );

		// convert inside the map() method directly.
        List<StaffPublic> result = staff.stream().map(temp -> {
            StaffPublic obj = new StaffPublic();
            obj.setName(temp.getName());
            obj.setAge(temp.getAge());
            if ("mkyong".equals(temp.getName())) {
                obj.setExtra("this field is for mkyong only!");
            }
            return obj;
        }).collect(Collectors.toList());

        System.out.println(result);

    }
	
}

Output


[
	StaffPublic{name='mkyong', age=30, extra='this field is for mkyong only!'}, 
	StaffPublic{name='jack', age=27, extra='null'}, 
	StaffPublic{name='lawrence', age=33, extra='null'}
]

References

  1. Processing Data with Java SE 8 Streams, Part 1
  2. Java 8 – Filter a Map examples
  3. Java 8 flatMap example
  4. Collectors JavaDoc

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities.

Comments

avatar
8 Comment threads
3 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
10 Comment authors
Laurence O'TooleJithesh ThomasAshish AgrawalVenkateshsaaa Recent comment authors
newest oldest most voted
Max Lambrecht
Guest
Max Lambrecht

Instead of map(x -> x.getName()) can be used map(Staff::getName).

Ashish Agrawal
Guest
Ashish Agrawal

Yes

Wayn
Guest
Wayn

Wouldn’t this bit create a new instance of StaffPublic for each element in the List?: .map(temp -> { StaffPublic obj = new StaffPublic(); obj.setName(temp.getName()); obj.setAge(temp.getAge()); if (“mkyong”.equals(temp.getName())) { obj.setExtra(“this field is for mkyong only!”); } return obj; }

havryliuk
Guest
havryliuk

yes, it will, this is what is needed

Vinayak A
Guest
Vinayak A

Hello Sir,

Thanks for sharing such a nice post.

Laurence O'Toole
Guest
Laurence O'Toole

public class ExerciseMapExample2 { public static void main(String ...args) { List<Staff> staff = Arrays.asList( new Staff("mkyong", 30, new BigDecimal(10000)), new Staff("jack", 27, new BigDecimal(20000)), new Staff("lawrence", 33, new BigDecimal(30000)) ); // convert inside the map() method directly. List<StaffPublic> result = staff.stream().map(ExerciseMapExample2::process).collect(Collectors.toList()); System.out.println(result); } private static StaffPublic process(Staff temp) { StaffPublic obj = new StaffPublic(); obj.setName(temp.getName()); obj.setAge(temp.getAge()); if ("mkyong".equals(temp.getName())) { obj.setExtra("this field is for mkyong only!"); } return obj; } }

Jithesh Thomas
Guest
Jithesh Thomas

very nice blog and simple

Venkatesh
Guest
Venkatesh

3.3 Java 8 example. , NowJava8 Class. // convert inside the map() method directly. List result = staff.stream().map(temp -> { StaffPublic obj = new StaffPublic(); obj.setName(temp.getName()); obj.setAge(temp.getAge()); if (“mkyong”.equals(temp.getName())) { obj.setExtra(“this field is for mkyong only!”); } return obj; }).collect(Collectors.toList()); System.out.println(result); the above function will nowhere return the output you have specified. It will only something like the below. com.sample.process.StaffPublic@3b07d329, com.sample.process.StaffPublic@41629346, com.sample.process.StaffPublic@404b9385 Please putt correct code and respective output for the same.

Ashish Agrawal
Guest
Ashish Agrawal

Hi Vankatesh,

Please override toString() method in “StaffPublic” class then you will get correct output.

code is perfect, such a nice blog, Thanks MKYong.

saaa
Guest
saaa

good

Carol
Guest
Carol

Good article. Thanks