一、简介
- Java 8引入的新特性;
- Stream流不会存储数据;
- Stream流不会改变源数据,只是将数据转换为元素序列;
- Stream流可以将流中的数据再次转换为数据;
- Stream流是延迟加载的,这意味着它在需要的时候才会去加载
二、基本使用
- 创建Stream:从一个数据源(集合,数组)中获取流;
- 中间操作: 一个中间操作链,对数据源的数据进行操作;
- 终止操作: 一个终止操作,终止链式操作;
1. 基本三步骤
- 创建;
- filter();
- skip();
- limit();
- distinct();
public class StreamFirst {
List<Student> list = Arrays.asList(new Student("张三",18,"陕西"),
new Student("李四",23,"山西"),
new Student("王五",34,"河北"),
new Student("张三丰",20,"河南"),
new Student("张三丰",20,"河南"),
new Student("张三丰",20,"河南"));
@Test
public void firstMethod(){
Stream<Student> streamList = list.stream();
String[] strArr= {"张三","李四","王五","赵六"};
Stream<String> streamArr = Arrays.stream(strArr);
Stream<String> streamStream = Stream.of(strArr);
}
@Test
public void secondMethod(){
List<Student> list = this.list.stream().filter(element -> {
return element.getAge() > 20;
}).collect(Collectors.toList());
System.out.println(list);
}
@Test
public void thirdMethod(){
List<Student> list = this.list.stream().skip(2).collect(Collectors.toList());
System.out.println(list);
}
@Test
public void fourthMethod(){
List<Student> list = this.list.stream().limit(2).collect(Collectors.toList());
System.out.println(list);
}
@Test
public void FifMethod(){
List<Student> list = this.list.stream().distinct().collect(Collectors.toList());
System.out.println(list);
}
}
2. 惰性求值
public class StreamFirst {
List<Student> list = Arrays.asList(new Student("张三",18,"陕西"),
new Student("李四",23,"山西"),
new Student("王五",34,"河北"),
new Student("张三丰",20,"河南"),
new Student("张三丰",20,"河南"),
new Student("张三丰",20,"河南"));
@Test
public void firstMethod(){
Stream<Student> stream = list.stream().filter(element -> {
System.out.println("迭代");
return element.getAge() > 20;
}).limit(2);
}
@Test
public void secondMethod(){
List<Student> list = this.list.stream().filter(element -> {
System.out.println("短路");
return element.getAge() > 0;
}).limit(2).collect(Collectors.toList());
System.out.println(list);
}
}
3. map
public class StreamFirst {
List<Student> list = Arrays.asList(new Student("张三",18,"陕西"),
new Student("李四",23,"山西"),
new Student("王五",34,"河北"),
new Student("张三丰",20,"河南"),
new Student("张三丰",20,"河南"),
new Student("张三丰",20,"河南"));
@Test
public void firstMethod(){
List<Object> list = this.list.stream().map(element -> {
element.setAge(element.getAge() + 10);
return element;
}).collect(Collectors.toList());
System.out.println(list);
}
}