首先map可以翻译为映射,所以map方法其实就是通过map进行映射。
map映射就是将流中的对象转换成另一个对象。通过这样的过程就可以将一个集合通过流的map映射,最终转换成另一个集合。
比如我们将Postman对象集合转换为对象中的年龄的集合
public class Java8Map { 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@AllArgsConstructorclass Postman { private String sex; private int age;}@Data@AllArgsConstructorclass 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类型的集合了。