JDK8新特新之Stream流
Stream流,操作数据,与CPU打交道,只有执行终止操作才会执行中间链操作,并产生结果,之后不会在被使用
四种创建方式
// 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表达式