前言:
实习时看公司的项目代码,看到了如下代码,当时很懵,这是什么?查阅了相关资料,现写下笔记以免忘掉。
说明:
在解释之前先说明下这几个常用api
《1》stream():把一个源数据转换成流。
《2》map:用于映射每个元素到对应的结果。
《3》->:正则表达式。
《4》filte:用于通过设置条件过滤数据。
《5》sorted:用于对流进行排序。
《6》Collectors:实现很多归约操作。
解释:
其实这种写法就相当于我们很熟悉的写法【对象转换为其他对象】,下面我将列举三种例子,就能掌握这种新特性的写法:
《1》大写字符串列表
//我们以前的写法
List<String> list1= Arrays.asList("a","b","c");
List<String> list2=new ArrayList<>();
for (String s:list1) {
list2.add(s.toUpperCase());
}
System.out.println(list2);//[A, B, C]
//新特性写法1
List<String> list3=list1.stream().map(s->s.toUpperCase).collect(Collectors.toList());
System.out.println(list3);//[A, B, C]
//新特性写法2
List<String>
list4=list1.stream().map(String::toUpperCase).collect(Collectors.toList());
System.out.println(list4);//[A, B, C]
《2》对象列表->字符串列表
//我们以前的写法
List<Student> list1=Arrays.asList(new Student("古力娜扎",18),new Student("迪丽热巴",19));
List<String> list2=new ArrayList<>();
for(Student s:list1){
list2.add(s.getName());
}
System.out.println(list2);//[古力娜扎, 迪丽热巴]
//新特性写法1
List<String> list3=list1.stream().map(s->s.getName()).collect(Collectors.toList());
System.out.println(list3);//[古力娜扎, 迪丽热巴]
//新特性写法2
List<String> list4=list1.stream().map(Student::getName).collect(Collectors.toList());
System.out.println(list4);//[古力娜扎, 迪丽热巴]
《3》对象列表->其他对象列表
//我们以前的写法
List<Student> list1=Arrays.asList(new Student("古力娜扎",18),new Student("迪丽热巴",19));
List<Start> list2=new ArrayList<>();
for(Student s:list1){
Start s1=new Start();
s1.setName(s.getName());
s1.setAge(s.getAge());
s1.setSex("woman");
list2.add(s1);
}
System.out.println(list2);//[Start@6d6f6e28, Start@135fbaa4] 未重写toString方法,输出的是地址
//新特性写法
List<Start> list3=list1.stream().map(temp->{
Start s=new Start();
s.setName(temp.getName());
s.setAge(temp.getAge());
s.setSex("woman");
return s;
}).collect(Collectors.toList());
System.out.println(list3);//[Start@6acbcfc0, Start@5f184fc6]