当前位置: 首页> 教育> 高考 > Java中的Stream流

Java中的Stream流

时间:2025/7/13 14:27:48来源:https://blog.csdn.net/m0_71513446/article/details/140434509 浏览次数:0次

Stream流

文章目录

  • Stream流
    • 初识Stream流
      • 体验Stream;流的作用
    • Stream流的作用
    • Stream流的使用步骤

初识Stream流

体验Stream;流的作用

需求:按照下面的要求完成集合的创建和遍历创建一个集合,存储多个字符串元素

ArrayList<String> list = new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");

要求:

  • 把所有以“张”开头的元素存储到新集合中
  • 把“张”开头的,长度为3的元素再存储到新集合中
  • 遍历打印最终结果
package com.example.demo;import java.util.ArrayList;public class Text {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("张无忌");list.add("周芷若");list.add("赵敏");list.add("张强");list.add("张三丰");//        1.把所有以“张”开头的元素存储到新集合中ArrayList<String> list1 = new ArrayList<>();for (String name : list) {if(name.startsWith("张")){list1.add(name);}}//        2.把“张”开头的,长度为3的元素再存储到新集合中ArrayList<String> list2 = new ArrayList<>();for (String name : list1) {if(name.length() == 3){list2.add(name);}}//        3.遍历打印最终结果System.out.println(list2);}
}
package com.example.demo;import java.util.ArrayList;public class Text {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("张无忌");list.add("周芷若");list.add("赵敏");list.add("张强");list.add("张三丰");list.stream().filter(name->name.startsWith("张")).filter(name->name.length() == 3).forEach(name-> System.out.println(name));}
}

Stream流的作用

结合Lambda表达式,简化集合、数组的操作

Stream流的使用步骤

①先得到一条Stream流(流水线),并把数据放上去

在这里插入图片描述

package com.example.demo;import java.util.ArrayList;
import java.util.Collections;public class Text {public static void main(String[] args) {//单列集合ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"a","b","c","d","e");list.stream().forEach(s-> System.out.println(s));}
}
package com.example.demo;import java.util.HashMap;public class StreamDemo2 {public static void main(String[] args) {
//        1.创建双列集合HashMap<String,Integer> hm = new HashMap<>();
//        2.添加数据hm.put("a",1);hm.put("b",2);hm.put("c",3);hm.put("d",4);
//        3.第一种获取获取Stream流的方法
//        hm.keySet().stream().forEach(s-> System.out.println(s));
//        4.第二种获取Stream流的方法hm.entrySet().stream().forEach(s-> System.out.println(s));}
}
package com.example.demo;import java.util.Arrays;public class StreamDemo3 {public static void main(String[] args) {
//        1.创建数组int[] arr = {1,2,3,4,5,6,7,8,9,10};
//        2.获取Stream流,引用数据类型同样适用Arrays.stream(arr).forEach(s-> System.out.println(s));}
}
package com.example.demo;import java.util.stream.Stream;public class StreamDemo4 {public static void main(String[] args) {//一对零散的数据Stream.of(1,2,3,4,5).forEach(s-> System.out.println(s));Stream.of("a","b","c").forEach(s -> System.out.println(s));//Stream接口中静态方法of的细节//方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组//但数组必须是引用数据类型的,如果传递基本数据类型,是会把整个数组当做一个元素,放到Stream当中}
}

②利用Stream流中的API进行各种操作

1.过滤 转换 中间方法:方法调用完毕之后,还可以调用其他方法

在这里插入图片描述

package com.example.demo;import java.util.ArrayList;
import java.util.Collections;public class StreamDemo5 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"张无忌","周芷若","赵敏","张三丰");list.stream().filter(s-> s.startsWith("张")).filter(s->s.length() == 3).forEach(s-> System.out.println(s));list.stream().limit(3).forEach(s-> System.out.println(s));list.stream().skip(4).forEach(s-> System.out.println(s));   }
}
package com.example.demo;import java.util.ArrayList;
import java.util.Collections;public class StreamDemo6 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"张无忌","张无忌","张无忌","周芷若","赵敏","张三丰");list.stream().distinct().forEach(s-> System.out.println(s));}
}
package com.example.demo;import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Function;public class StreamDemo7 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();Collections.addAll(list,"张无忌-15","张无忌-15","张无忌-15","周芷若-16","赵敏-17","张三丰-17");
//        需求:只获取里面的年龄并进行打印
//        第一个类型:流中原来的数据类型
//        第二个类型:要转成之后的数据类型
//        apply的形参s:依次表示流里面的每一个数据
//        返回值:表示转换之后的数据
//        当map方法执行完毕之后,流上的数据就变成整数了
//        所以forEach方法里的s依次表示流里面的每一个数据,这个数据现在是整数list.stream().map(new Function<String, Integer>() {public Integer apply(String s){String[] arr = s.split("-");String ageString = arr[1];int age = Integer.parseInt(ageString);return age;}}).forEach(s-> System.out.println(s));list.stream().map(s->Integer.parseInt(s.split("-")[1])).forEach(s-> System.out.println(s));}
}

注意1:中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程。

注意2:修改Stream流中的数据,不会影响原来集合或者数组中的数据。

2.统计 打印 终结方法:最后一步,调用完毕之后,不能调用其他方法

在这里插入图片描述

package com.example.demo;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.Consumer;
import java.util.function.IntFunction;public class StreamDemo8 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "张无忌", "张无忌", "张无忌", "周芷若", "赵敏", "张三丰", "张强");//Consumer的泛型:表示流里面的数据//accept方法的形参s:依次表示流里面的每一个数据
//        方法体:对每一个数据的处理操作(打印)/*list.stream().forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});*///        list.stream().forEach(s-> System.out.println(s));//        long count = list.stream().count();
//        System.out.println(count);//        Object[] arr = list.stream().toArray();
//        System.out.println(Arrays.toString(arr));//IntFunction的泛型:具体数组的类型//apply的形参:流中数据的个数,要跟数组的长度保持一致//apply返回值:具体类型的数组//方法体:就是创建数组//toArray方法的参数的作用:负责创建一个指定类型的数组//toArray方法的底层,会依次得到流里面的每一个数据,并把数据放到数组当中//toArray方法的返回值:是一个装着流里面所有数据的数组
//        String[] arr = list.stream().toArray(new IntFunction<String[]>() {
//            @Override
//            public String[] apply(int value) {
//                return new String[value];
//            }
//        });
//
//        System.out.println(Arrays.toString(arr));String[] arr2 = list.stream().toArray(value -> new String[value]);System.out.println(Arrays.toString(arr2));}
}

在这里插入图片描述
在这里插入图片描述

关键字:Java中的Stream流

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: