当前位置: 首页 > news >正文

Stream流的中间方法、终结方法与收集方法

 

Java Stream 流简介

Java Stream 是 Java 8 引入的一个强大的功能,用于处理集合(如 ListSet 等)中的数据。Stream 提供了一种高效、声明式的方式来对集合进行操作,例如过滤、排序、转换、聚合等。它类似于数据库中的 SQL 查询,允许你以一种更简洁和直观的方式来处理数据。

Stream 的核心概念

  1. Stream:数据的序列,可以包含有限或无限个元素。

  2. 操作:对 Stream 中的数据进行的操作,如过滤、映射、排序等。

  3. 终端操作:产生结果的操作,如 collectforEachsum 等。终端操作会触发 Stream 的执行。

  4. 惰性求值:Stream 的操作是惰性求值的,只有在执行终端操作时,才会真正执行中间操作。

中间方法:

package Stream;import java.util.*;
import java.util.Collections;
import java.util.function.Predicate;
import java.util.stream.Stream;public class demo1 {public static void main(String[] args) {//stream流只能使用一次//修改流中数据,不会影响源数据ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "张三", "张三","张三","李四","李四",  "王五", "赵六","张二2");ArrayList<String> list1 = new ArrayList<>();Collections.addAll(list, "append");//filter过滤 留下张开头的list.stream().filter(new Predicate<String>() {@Overridepublic boolean test(String s) {//true留下,false不要return s.startsWith("张");}}).forEach(s -> System.out.println(s));System.out.println("-------------");Stream<String> stream1 = list.stream().filter(s -> s.startsWith("张"));Stream<String> stream2 = stream1.filter(s -> s.length() == 3);stream2.forEach(s -> System.out.println(s));//还是原数据//System.out.println(list);//limit 获取前几个 skip跳过前几个list.stream().limit(2).forEach(s-> System.out.println(s));System.out.println("-------------");list.stream().skip(2).forEach(s-> System.out.println(s));System.out.println("-------------");//distinct去重,依赖hashcode与equalslist.stream().distinct().forEach(s-> System.out.println(s));System.out.println("-------------");Stream.concat(list1.stream(),list.stream()).forEach(s-> System.out.println(s));}
}
转换流中数据
//stream流只能使用一次//修改流中数据,不会影响源数据ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "张三-10","李四-9",  "王五-8", "赵六-7","张二-2");//只获取年龄 string->int//第一个类型,原本数据类型,第二个类型,转换后数据类型//apply形参表示每个数据,返回转换后数据list.stream().map(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {String[] arr = s.split("-");String age1 = arr[1];int age = Integer.parseInt(age1);return age;}}).forEach(s-> System.out.println(s));

终结方法:

package Stream;import java.util.*;
import java.util.Collections;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;public class demo1 {public static void main(String[] args) {//stream流只能使用一次//修改流中数据,不会影响源数据ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "张三-10","李四-9",  "王五-8", "赵六-7","张二-2");//void forEach(Consumer action)//Cosumer泛型:表示流中数据//方法体打印处理
//        list.stream().forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });list.stream().forEach(s->System.out.println(s));//统计countlong count1 = list.stream().count();System.out.println(count1);//收集toArrayObject[] arr1 = list.stream().toArray();System.out.println(Arrays.toString(arr1));String[] arr2 = list.stream().toArray(value-> new String[value]);System.out.println(Arrays.toString(arr2));}
}
收集方法:

 
package Stream;import java.util.*;
import java.util.Collections;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class demo1 {public static void main(String[] args) {//collect(Collector collector) 收集流中数据ArrayList<String> list = new ArrayList<>();Collections.addAll(list, "张三-男-10","李四-女-9",  "王五-男-8", "赵六-女-7","张二-男-2");//收集List集合//收集所有男性List<String> newList = list.stream().filter(s->"男".equals(s.split("-")[1])).collect(Collectors.toList());System.out.println(newList);//收集set去重Set<String> newlist2 =list.stream().filter(s->"男".equals(s.split("-")[1])).collect(Collectors.toSet());System.out.println(newlist2);//map 键值对确定//收集男性 键:名字 值:年龄//收集进Map,不可重复,否则报错/*to map :参数一表示键的生成规则参数二表示值的生成规则*///匿名内部类Map<String,Integer> map =list.stream().filter(s->"男".equals(s.split("-")[1])).collect(Collectors.toMap(new Function<String, String>() {@Overridepublic String apply(String s) {return s.split("-")[0];}}, new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return Integer.parseInt(s.split("-")[2]);}}));//lambda表达式System.out.println(map);Map<String,Integer>map2 = list.stream().filter(s->"男".equals(s.split("-")[1])).collect(Collectors.toMap(s->s.split("-")[0],s->Integer.parseInt(s.split("-")[2])));System.out.println(map2);}
}

http://www.xdnf.cn/news/628345.html

相关文章:

  • 【日志软件】hoo wintail 的替代
  • Python——MySQL远程控制
  • [原创]X86C++反汇编01.IDA和提取签名
  • 1、初识YOLO:目标检测的闪电战
  • 地下综合管廊 3D 可视化平台
  • CSS定位详解:掌握布局的核心技术
  • C语言数据结构-链式栈
  • 为什么尺规无法三等分任意角?
  • Eclipse中设置Java程序运行时的JVM参数
  • 聊一聊手动测试与探索性测试的区别
  • 嵌入式培训之系统编程(四)进程
  • 试验台铁地板:颠覆传统的创新之举
  • 【RocketMQ 生产者和消费者】- 生产者启动源码 - MQClientInstance 定时任务(4)
  • ✨ PLSQL卡顿优化
  • 嵌入式开发之STM32学习笔记day10
  • Linux系统之pwd命令的基本使用
  • 分布式锁总结
  • 危化品经营单位安全生产管理人员考试主要内容
  • SQL进阶之旅 Day 2:高效的表设计与规范:从基础到实战
  • CMake指令:add_library()
  • 主从复制启动
  • 二叉树层序遍历6
  • C++--auto详解
  • 2025家政预约小程序开发:功能模块解析与行业解决方案
  • Cookie 与 Session
  • Adminer 连接mssql sqlserver
  • SEO长尾词优化精准布局
  • 构建Harbor私有镜像库(详细版)
  • 《BI 展示:从核心目标到未来趋势》
  • 『uniapp』uni-share 分享功能 使用例子(保姆级图文)