赞
踩
它返回一个由给定函数处理的 Stream 实例。 map()返回对象流,为了得到IntStream、LongStream、DoubleStream等原始数据类型的流,Java8 stream分别提供了mapToInt()、mapToLong()和mapToDouble()方法。
Stream.map () 方法如下。
map(Function mapper)
我们需要将 Function 实例作为 lambda 表达式传递。此方法返回具有给定函数处理结果的 Stream 实例。这是一个中间操作。
在这里,我们将使用 Stream.map() 作为中间操作将 HashMap 转换为对象列表。
- public class MapToList {
- public static void main(String[] args) {
- Map<Integer, String> map = new HashMap<>();
- map.put(111, "Lalkrishna");
- map.put(154, "Atal");
- map.put(30, "Narendra");
- map.put(200, "Amit");
-
- List<User> list = map.entrySet().stream().sorted(Comparator.comparing(e -> e.getKey()))
- .map(e -> new User(e.getKey(), e.getValue())).collect(Collectors.toList());
-
- list.forEach(l -> System.out.println("Id: "+ l.getId()+", Name: "+ l.getName()));
- }
- }
- class User {
- private int id;
- private String name;
- public User(int id, String name) {
- this.id = id;
- this.name = name;
- }
- public int getId() {
- return id;
- }
- public String getName() {
- return name;
- }
- }
输出
- Id: 30, Name: Narendra
- Id: 111, Name: Lalkrishna
- Id: 154, Name: Atal
- Id: 200, Name: Amit
在这个例子中,我们将使用 Stream.map() 作为中间操作将一个对象的 List 转换为另一个不同对象的 List。
- public class ListToAnotherList {
- public static void main(String[] args) {
- Person p1 = new Person(1, "Mohan", "student");
- Person p2 = new Person(2, "Sohan", "teacher");
- Person p3 = new Person(3, "Dinesh", "student");
- List<Person> personList = Arrays.asList(p1, p2, p3);
-
- List<Student> stdList = personList.stream().filter(p -> p.getPersonType().equals("student"))
- .map(p -> new Student(p.getId(), p.getName()))
- .collect(Collectors.toList());
-
- stdList.forEach(e -> System.out.println("Id:"+ e.getId()+ ", Name: "+ e.getName()));
- }
- }
- class Person {
- private int id;
- private String name;
- private String personType;
- public Person(int id, String name, String personType) {
- this.id = id;
- this.name = name;
- this.personType = personType;
- }
- public int getId() {
- return id;
- }
- public String getName() {
- return name;
- }
- public String getPersonType() {
- return personType;
- }
- }
- class Student {
- private int id;
- private String name;
- public Student(int id, String name) {
- this.id = id;
- this.name = name;
- }
- public int getId() {
- return id;
- }
- public String getName() {
- return name;
- }
- }
输出
- Id:1, Name: Mohan
- Id:3, Name: Dinesh
这里我们提供了 mapToInt() 的例子,我们可以用同样的方式来处理 mapToLong() 和 mapToDouble()。
- public class MapToIntDemo {
- public static void main(String[] args) {
- Employee e1 = new Employee(1, 20);
- Employee e2 = new Employee(2, 15);
- Employee e3 = new Employee(3, 30);
- List<Employee> list = Arrays.asList(e1, e2, e3);
- int sum = list.stream().mapToInt(e -> e.getAge()).sum();
- System.out.println("Sum: "+ sum);
- }
- }
- class Employee {
- private int id;
- private int age;
- public Employee(int id, int age) {
- this.id = id;
- this.age = age;
- }
- public int getId() {
- return id;
- }
- public int getAge() {
- return age;
- }
- }
输出
Sum: 65
参考:
https://www.concretepage.com/java/jdk-8/java-8-stream-map-example
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。