JDK8新特新之Stream流

JDK8新特新之Stream流

什么是Stream流

Stream流,操作数据,与CPU打交道,只有执行终止操作才会执行中间链操作,并产生结果,之后不会在被使用

Stream流的分类

1.顺序流 Stream
2.并行流 parallelStream

怎么创建?

四种创建方式

// 1.集合方式创建 stream()
List<User> list1 = new ArrayList<User>();
        list1.add(new User(23,"luo",2000));
        list1.add(new User(24,"ljk",4000));
        list1.add(new User(13,"jiang",7000));
        list1.add(new User(203,"kang",1000));
        Stream<User> userStream = list1.stream();
        //中间操作
         userStream.map(t1 -> t1.getName() + "cc").sorted((t1,t2)->t1.getName().compareTo(t2.getName())) .forEach(System.out::println);
         
// 2.数组方式创建 stream
int[] arr = new int[]{1,4,3,9,4,7,6};
        IntStream stream1 = Arrays.stream(arr);
        stream1.filter(t->t<5) .sorted().distinct().forEach(System.out::println);
        
// 3.利用Stream的静态方法of()创建stream
Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6, 7);
        integerStream.filter(t->t<5).forEach(System.out::println);
        
// 4.利用两种无限流创建stream
		// iterate方式
		Stream.iterate(0,t->t+2).limit(10).forEach(System.out::println);
		//generate方式
		Stream.generate(Math::random).limit(10).forEach(System.out::println);

中间操作的先后顺序

map filter forEach: 是垂直执行的,就是流中的每一个元素执行完便跳转到下一个中间操作
sorted: 是水平执行的,流中的每一个元素都必须连续经该中间操作处理

常用中间操作
limit(long maxSize):截取流,限制流的大小
sorted():对流中的元素进行自然排序
map(Function<? super T,? extends Stream<? extends R>> mapper):将提供的映射函数应用于每个元素,产生每个元素的结果组成的流
flatMap(Function<? super T,? extends Stream<? extends R>> mapper):将提供的映射函数应用于每个元素,产生的映射流的内容来替换该流的每个元素的结果的流。
filter(Predicate<? super T> predicate):过滤器,筛选出所需要的流元素
distinct():和数据库一样,去掉重复的流元素
sum(): 求流中所有元素的总和

常用终止操作
forEach(Consumer<? super T> action): 遍历,对每个流元素可以执行操作

注意:如果看不懂方法中的参数,建议先看 lambda表达式

猜你喜欢

转载自blog.csdn.net/qq_42224683/article/details/107078751