首先 map 可以翻译为映射,所以map方法其实就是通过map进行映射。
map映射就是将流中的对象转换成另一个对象。通过这样的过程就可以将一个集合通过流的map映射,最终转换成另一个集合。
比如我们将Postman对象集合转换为对象中的年龄的集合
public class Java 8Map {
public static void main(String[] args) {
List<Postman> list = new ArrayList<>();
list.add(new Postman("男", 15));
list.add(new Postman("男", 17));
list.add(new Postman("男", 19));
list.add(new Postman("女", 21));
list.add(new Postman("女", 23));
// 将这个Postman类型的List集合转换成保存所有年龄数据的Integer类型的集合
List<Integer> ages = list.stream().map(Postman::getAge).collect(Collectors.toList());
System.out.println(ages);
}
}
@Data
@AllArgs Constructor
class Postman {
private String sex;
private int age;
}
@Data
@AllArgsConstructor
class Person {
private String sex;
private int age;
}
如上图所示,将list通过stream方法流化之后,再通过map方法可以将流中的对象映射成另外的对象。而map方法的参数就是映射的规则,如图中就是表示将流中的每个Postman对象映射成这个对象的age属性。然后将映射后的 Integer 对象流收集成集合。
那如果是要转换成另外一个类型Person的集合呢?
List<Person> personList = list.stream().map(i -> {
return new Person(i.getSex(), i.getAge());
}).collect(Collectors.toList());
System.out.println(personList);
[Person(sex=男, age=15), Person(sex=男, age=17), Person(sex=男, age=19), Person(sex=女, age=21), Person(sex=女, age=23)]
映射的关键方法map中的代码被“->”分成了两部分。前面的部分是表示流中的每一个对象,后面的部分表示要映射的结果。(实际应用中映射的逻辑一般不会这么简单,一行就能搞定,需要结合业务逻辑编写映射的规则)。
这样最终通过collect收集起来的集合就是Person类型的集合了。