stream流的注意点
1、map用法中key跟value不可以为null, key为null需要用toMap
2、map用法中不可以有重复的key,会报错
3、stream写法中局部代码块的数据与外部方法中的变量不互通
4、jdk8版本中map用法value不可以为null, 因为流中用到了hashmap的merge方法, 该方法对value做了非空判断
实体类
Student
import lombok.Data;
@Data
public class Student {
private String id;
private String name;
private Integer age;
}
StudentDTO
import lombok.Data;
@Data
public class StudentDTO {
private String id;
private String name;
}
演示代码及测试
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
public class Demo {
public static void main(String[] args) {
List<Student> studentList = getList();
studentList.forEach(student -> {
System.out.println(student.getAge());
student.setName("aaa");
});
List<String> idList1 = studentList.stream().map(student -> {
return student.getId();
}).collect(Collectors.toList());
List<String> idList = studentList.stream().map(Student::getId).collect(Collectors.toList());
Map<String, Integer> collect = studentList.stream().collect(Collectors.toMap(Student::getId, Student::getAge));
System.out.println(collect);
HashMap<String, String> collect1 = studentList.stream().collect(HashMap::new, (m, v) -> m.put(v.getId(), v.getName()), HashMap::putAll);
Map<String, Student> studentMap = studentList.stream().collect(Collectors.toMap(Student::getId, Function.identity()));
System.out.println(studentMap);
List<StudentDTO> studentDTOList = studentList.stream().map(student -> {
StudentDTO studentDTO = new StudentDTO();
studentDTO.setId(student.getId());
studentDTO.setName(student.getName());
return studentDTO;
}).collect(Collectors.toList());
System.out.println(studentDTOList);
Map<String,List<Student>> map = studentList.stream().collect(Collectors.groupingBy(data -> data.getId());
Map<String,List<String>> map1 = studentList.stream().collect(Collectors.groupingBy(Student::getId
, Collectors.mapping(Student::getName, Collectors.toList())));
List<Student> filterStudentList = studentList .stream().filter(student-> student.getName().equals("1")).collect(Collectors.toList());
List<String> filterIdList = studentList .stream().filter(student-> student.getName().equals("1")).map(Student::getId).collect(Collectors.toList());
}
private static List<Student> getList() {
Student student1 = getStudent("1", "1", 1);
Student student2 = getStudent("2", "2", 2);
Student student3 = getStudent("3", "3", 3);
Student student4 = getStudent("4", "4", 4);
Student student5 = getStudent("5", "5", 3);
List<Student> list = new ArrayList<>();
list.add(student1);
list.add(student2);
list.add(student3);
list.add(student4);
list.add(student5);
return list;
}
private static Student getStudent(String id, String name, Integer age) {
Student student = new Student();
student.setId(id);
student.setAge(age);
student.setName(name);
return student;
}
}
持续学习中。。。。