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.
TestStreamMap.java
package com.favtuts.java8; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class TestStreamMap { public static void main(String[] args) { convertListStringToUpperCase(); } private static void convertListStringToUpperCase() { 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.favtuts.java8; import java.math.BigDecimal; public class Staff { private String name; private int age; private BigDecimal salary; public Staff() { } public Staff(String name, int age, BigDecimal salary) { this.name = name; this.age = age; this.salary = salary; } @Override public String toString() { return "Staff{" + " name='" + getName() + "'" + ", age='" + getAge() + "'" + ", salary='" + getSalary() + "'" + "}"; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } public BigDecimal getSalary() { return this.salary; } public void setSalary(BigDecimal salary) { this.salary = salary; } }
TestStreamMap.java
package com.favtuts.java8; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class TestStreamMap { public static void main(String[] args) { getAllNamesFromStaffList(); } private static void getAllNamesFromStaffList(){ List<Staff> staff = Arrays.asList( new Staff("favtuts", 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); //[favtuts, jack, lawrence] //Java 8 List<String> collect = staff.stream().map(x -> x.getName()).collect(Collectors.toList()); System.out.println(collect); //[favtuts, 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.
StaffPublic.java
package com.favtuts.java8; public class StaffPublic { private String name; private int age; private String extra; public StaffPublic(String name, int age, String extra) { this.name = name; this.age = age; this.extra = extra; } public StaffPublic() { } @Override public String toString() { return "StaffPublic{" + " name='" + getName() + "'" + ", age='" + getAge() + "'" + ", extra='" + getExtra() + "'" + "}"; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } public String getExtra() { return this.extra; } public void setExtra(String extra) { this.extra = extra; } }
BeforeJava8.java
package com.favtuts.java8; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class TestStreamMap { public static void main(String[] args) { List<Staff> staff = Arrays.asList( new Staff("favtuts", 30, new BigDecimal(10000)), new Staff("jack", 27, new BigDecimal(20000)), new Staff("lawrence", 33, new BigDecimal(30000)) ); convertStaffToStaffPublicBeforeJava8(staff); } private static void convertStaffToStaffPublicBeforeJava8(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 ("favtuts".equals(temp.getName())) { obj.setExtra("this field is for favtuts only!"); } result.add(obj); } System.out.println(result); } }
Output
[
StaffPublic{name='favtuts', age=30, extra='this field is for favtuts only!'},
StaffPublic{name='jack', age=27, extra='null'},
StaffPublic{name='lawrence', age=33, extra='null'}
]
3.3 Java 8 example.
NowJava8.java
package com.favtuts.java8; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class TestStreamMap { public static void main(String[] args) { List<Staff> staff = Arrays.asList( new Staff("favtuts", 30, new BigDecimal(10000)), new Staff("jack", 27, new BigDecimal(20000)), new Staff("lawrence", 33, new BigDecimal(30000)) ); convertStaffToStaffPublicNowJava8(staff); } private static void convertStaffToStaffPublicNowJava8(List<Staff> staff) { // 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 ("favtuts".equals(temp.getName())) { obj.setExtra("this field is for favtuts only!"); } return obj; }).collect(Collectors.toList()); System.out.println(result); } }
Output
[
StaffPublic{name='favtuts', age=30, extra='this field is for favtuts only!'},
StaffPublic{name='jack', age=27, extra='null'},
StaffPublic{name='lawrence', age=33, extra='null'}
]
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-basic/java8