一、创建方法:
Collection:直接调用stream();
Map:先转为Collection,再调用stream();
数组:Arrays.stream();
单独对象:Stream.of();
//双列集合流
Map<String,Integer> map = new HashMap<>();
Stream<Map.Entry<String, Integer>> stream1 = map.entrySet().stream();
//单列集合流
ArrayList<Integer> list = new ArrayList<>();
Stream<Integer> stream2 = list.stream();
//基本数据类型数组流
int[] arr = {1,2,3,4,5,6,6,7,8,21};
IntStream stream3 = Arrays.stream(arr);
//包装类数组流
Integer[] arr2 = {1,2,3,4,5,5};
Stream<Integer> stream4 = Arrays.stream(arr2);
//数据生成流
Stream<String> stream = Stream.of("123","qdqweq","1241rfq234r");
二、中间方法和终结方法
中间方法在执行后会返回一个被执行后的Stream,可继续调用方法。
终结方法不会返回流,不能继续调用。
中间方法可调用多个,终结方法只能调用一个。
======== 中间方法 filter过滤 和 终结方法foreach遍历 =================
//中间方法1 filter筛选 参数为 Predicate 谓词型接口,执行判断逻辑 ,true保留,false删除
//终结方法 foreach遍历 参数为 Consumer 消费型接口,无返回值,只处理数据。
list.stream().filter(i -> i > 7).forEach(i-> System.out.print(i+" "));
执行结果大于八的保留,其余全部过滤掉:

=============== 中间方法sorted 排序和 distinct去重 ========================
//中间方法2 sorter排序,参数为Comparator接口,排序
//中间方法3 distinct去重 依靠元素本身的hashcode与equals
list.stream().sorted((o1, o2) -> o2-o1).distinct().forEach(i-> System.out.print(i+" "));
执行结果 从大到小排序,并将重复的5去除

========= 中间方法 skip 跳过和 limit 保留 ==============================
//中间方法4 skip 参数为 long n,跳过前 n 个元素
//中间方法5 limit 参数为 long n,保留前 n 个元素
list.stream().skip(2).limit(4).forEach(i-> System.out.print(i+" "));
执行结果

========== 中间方法map 用来使用Function接口 ================
Stream<String> stream = Stream.of("张三","李四","王五","赵六","老七","老八");
//中间方法6 map 参数为Function<T,R> 功能型接口,其方法为apply,传入T,返回R,
//随机生成学生,从大到小按年龄排序,保留年纪最大的三个人,打印
stream.map(name->{
Random r = new Random();
return new Student(name,r.nextInt(17)+4);
}).sorted((o1, o2) -> o2.getAge()-o1.getAge()).limit(3).forEach(student-> System.out.println(student));
执行结果:

========终结方法 count 计数 和 collect 转为集合 ======================
//终结方法2 count 无参,返回一个long,为元素个数
long count = list.stream().count();
//终结方法3 collect 参数为 Collector ,将流转化为list、set、map等集合
list.stream().collect(Collectors.toList());
list.stream().collect(Collectors.toSet());
三、静态方法
属于Steam的静态方法:
============== concat 将两个流合并========
//静态方法 concat 两个流合并
Stream concat = Stream.concat(stream1, stream2);
本文介绍 Java 中 Stream API 的创建方式及使用技巧,包括中间操作如过滤、排序、去重等,以及终结操作如计数、收集等。通过实例演示如何高效地处理集合数据。
3870

被折叠的 条评论
为什么被折叠?



