class Student{
private String name;
private String sex;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
package java8.stream;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class StreamMapCollect {
public static void main(String[] args) {
List<Student> students = new ArrayList();
Student student1 = new Student();
student1.setAge("18");
student1.setName("小明");
student1.setSex("男");
Student student2 = new Student();
student2.setAge("17");
student2.setName("小红");
student2.setSex("女");
Student student3 = new Student();
student3.setAge("15");
student3.setName("小雨");
student3.setSex("女");
students.add(student1);
students.add(student2);
students.add(student3);
//需求1:拿出所有的学生年龄组成集合
//老办法
List<String> oldStuAge = new ArrayList();
for (Student stu : students){
oldStuAge.add(stu.getAge());
}
//java8新办法 一行代码解决
List<String> newStuAge = students.stream().map(Student::getAge).collect(Collectors.toList());
System.out.println(newStuAge);
//需求2 所有学生年龄加3
List<String> ageAdd3 = newStuAge.stream().map(n -> String.valueOf(Integer.valueOf(n)+3)).collect(Collectors.toList());
System.out.println(ageAdd3);
//取出所有名称
List<String> names = students.stream().map(Student::getName).collect(Collectors.toList());
//返回map 已名称为键 v1v2是判断key重复用v2
Map<String, Student> studentMap = students.stream().collect(Collectors.toMap(Student::getName,v->v, (v1,v2)->v2));
//返回左右年龄小于大于15岁(不包含)的学生名称 (此处需要注意你的filter在stream之后的话v变量就是Student对象了,如果在map之后的话你的v变量就是getName出来的String的对象了需要注意下!)
List<String> name15 = students.stream().filter(v->v.getAge()>15).map(Student::getName).collect(Collectors.toList());
//按性别分组,相同性别归类
Map<String,List<Student>> sexMap = students.stream().collect(Collectors.groupingBy(Student::getSex));