什么是Stream?
- 也叫Stream流,是|dk8开始新增的一套APl(java.util.stream.*),可以用于操作集合或者数组的数据。优势:Stream流大量的结合了Lambda的语法风格来编程,提供了一种更加强大,更加简单的方式操作集合或者数组中的数据,代码更简洁,可读性更好
Stream流的使用步骤
1、获取Stream流?
- 获取 集合 的Stream流
- 获取 数组 的Stream流
代码演示:
import java.util.*;
import java.util.stream.Stream;public class StreamTest2 {public static void main(String[] args) {// 1、如何获取List集合的Stream流?List<String> names =new ArrayList<>();Collections.addAll(names,"张三丰","张无忌","周芷若","赵敏","张强");Stream<String> stream = names.stream();// 2、如何获取Set集合的Stream流?Set<String> set=new HashSet<>();Collections.addAll(set,"刘德华","张曼玉","蜘蛛精","马德","德玛西亚");//获取Set集合的Stream流并输出带德的名字set.stream().filter(s -> s.contains("德")).forEach(System.out::println);//3、如何获取Map集合的stream流?Map<String,Double> map = new HashMap<>();map.put("古力娜扎",172.3);map.put("迪丽热巴",168.3);map.put("马尔扎哈",166.3);map.put("卡尔扎巴",168.3);//key的stream流Stream<String> stream1 = map.keySet().stream();//value的stream流Stream<Double> stream2 = map.values().stream();//键值对的stream流并输出身高=168.3的键值对map.entrySet().stream().filter(s -> s.getValue().equals(168.3)).forEach(System.out::println);// 4、如何获取数组的stream流?String[] names2 = {"张翠山","东方不败","唐大山","独孤求败"};//方法一Stream<String> stream3 = Arrays.stream(names2);//方法二Stream<String> stream4 = Stream.of(names2);}
}
运行结果:
2、Stream流常见的中间方法
- 中间方法指的是调用完成后会返回新的Stream流,可以继续使用(支持链式编程)
- 流只能收集一次()
代码演示:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;public class StreamTest3 {public static void main(String[] args) {List<Student> students = new ArrayList<>();students.add(new Student("小明","男",170));students.add(new Student("小美","女",168));students.add(new Student("小黑","男",188));students.add(new Student("小明","男",170));//1、filterstudents.stream().filter(s -> s.getHeight() >=170).forEach(System.out::println);System.out.println("----------------------------------------------------------");//2、sortedstudents.stream().sorted((Student o1, Student o2) -> Double.compare(o1.getHeight(),o2.getHeight())).forEach(System.out::println);System.out.println("----------------------------------------------------------");//3、limitstudents.stream().limit(2).forEach(System.out::println);System.out.println("----------------------------------------------------------");//4、skipstudents.stream().skip(2).forEach(System.out::println);System.out.println("----------------------------------------------------------");//5、distinctstudents.stream().distinct().forEach(System.out::println);System.out.println("----------------------------------------------------------");//6、mapstudents.stream().map(Student::getHeight).forEach(System.out::println);System.out.println("----------------------------------------------------------");//concatStream<String> s1 = Stream.of("张三", "李四", "王五");Stream<String> s2 = Stream.of("邓六", "刘七");Stream<String> s3 = Stream.concat(s1, s2);s3.forEach(System.out::println);}
}
运行结果:
3、Stream流常见的终结方法
- 终结方法指的是调用完成后,不会返回新Stream了,没法继续使用流了
- 收集Stream流:就是把Stream流操作后的结果转回到集合或者数组中去返回
- Stream流:方便操作集合/数组的手段;集合/数组:才是开发中的目的