Stream
java8新增
- 是数据渠道,用来操作数据源所产生的元素序列
- 集合讲的数据,流讲的是对数据的计算
- 注意:
- 1.Stream自己不会创建元素
- 2.Stream不会改变原对象|数据源,会返回一个持有结果的新的stream
- 3.惰性加载: stream操作是延迟执行的,会等到需要结果的时候才会执行
- 4.流是一次性的流,如果已经使用过流后,这个流就已经被消费了,所有不能一个流反复使用
- 创建流
- 中间操作
- 终止操作
import java.util.*;
import java.util.stream.Stream;
public class StreamDemo01 {
public static void main(String[] args) {
// 1、可以通过Conllection系列集合提供的顺序流stream()
List<String> list = new ArrayList<>();
Stream<String> stream1 = list.stream();
System.out.println(stream1);
// 2、通过Arrays中的静态方法stream()获取数据流
Integer ints[] = new Integer[10];
Stream<Integer> stream2 = Arrays.stream(ints);
stream2.forEach(System.out::println);
// 3、通过Stream类中的静态方法of()
Stream<String> stream3 = Stream.of("aa", "bb", "cc","123");
stream3.forEach(System.out::println);
}
}
Stream使用
import java.util.*;
import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
import com.shsxt.entity.Person;
import com.shsxt.entity.Status;
public class StreamDemo02 {
List<Person> list = Arrays.asList(
new Person("张三", 18,Status.BUSY),
new Person("李四", 38,Status.FREE),
new Person("王五", 50,Status.BUSY),
new Person("赵六", 16,Status.FREE),
new Person("田七", 28,Status.BUSY),
new Person("田七", 28,Status.NORMAL)
);
@Test
public void test3() {
list.stream().map(Person::getName).forEach(System.out::println);
}
@Test
public void test2() {
list.stream().sorted().forEach(System.out::println);
}
@Test
public void test() {
Stream<Person> stream = list.stream();
//中间操作
stream = stream.filter((p)->{
System.out.println("------正在执行中间操作-------过滤|筛选");
return p.getAge()>18;
})
.distinct();
//.limit(2);
//终止操作
stream.forEach(System.out::println);
}
}