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

Java Stream流编程入门

流式编程

在这里插入图片描述

stream流式编程分为

  • 首先转化为stream
  • 中间函数的链接
  • 最后的终结函数

怎么转化为stream

  • 单列集合
List<String> list = new ArrayList<String>();
Collections.addAll(list,"1","2","3","4","5","6","7","8","9");
list.stream().forEach(System.out::println);
  • 双列集合
Map<String,String> map = new HashMap<String,String>();
map.put("1","2");
map.put("3","4");
map.put("5","6");
map.entrySet().stream().forEach(System.out::println);
  • 数组
Arrays.stream(new int[0]);
  • 多个数字
Stream.of(1,2,3,4).forEach(System.out::println);

常用中间函数

注:中间函数可连接多个

  • filter:过滤
List<String> list = new ArrayList<String>();
Collections.addAll(list,"1","2","3","4","5","6","7","8","9");
list.stream().filter(s -> s.equals("1")).forEach(System.out::println);

输出:1

  • map:将流中的每个元素传入给定的函数,得到一个新的流。
Stream.of("a","b","c","d").map(String::toUpperCase).forEach(System.out::print);

输出:ABCD

  • limit:取前n个
List<String> list = new ArrayList<String>();
Collections.addAll(list,"1","2","3","4","5","6","7","8","9");
list.stream().limit(3).forEach(System.out::print);

输出:123

  • skip:跳过前n个
List<String> list = new ArrayList<String>();
Collections.addAll(list,"1","2","3","4","5","6","7","8","9");
list.stream().skip(4).forEach(System.out::print);

输出:56789

  • distinct:去重,依赖hashCode(),equals()
List<String> list = new ArrayList<String>();
Collections.addAll(list,"1","2","3","4","4","3","2","1","0");
list.stream().distinct().forEach(System.out::print);

输出:12340

  • concat:合并两个流
List<String> l1 = new ArrayList<String>();
l1.add("1");
List<String> l2 = new ArrayList<String>();
l2.add("2");
Stream.concat(l1.stream(),l2.stream());

输出:12

  • sorted: 排序
List<Integer> numbers = Arrays.asList(5, 6, 4, 3, 8, 0, 1, 9, 6, 8);
//第一种   默认
numbers.stream()
        .sorted()
        .forEach(System.out::println);
// 第二种  自定义排序
numbers.stream()
        // 如果是b.compareTo(a)则降序  a.compareTo(b)则升序
        .sorted((a, b) -> b.compareTo(a)) 
		.forEach(System.out::println);

输出:
0 1 3 4 5 6 6 8 8 9
9 8 8 6 6 5 4 3 1 0

终结函数

注:终结函数只能有一个

  • forEach:遍历
  • count:求数量
  • collect:收集
lines.stream().filter(s -> s.startsWith("张")).collect(Collectors.toList());
lines.stream().collect(Collectors.toSet());
lines.stream().collect(Collectors.toMap(s -> s.split("-")[0],s -> Integer.parseInt(s.split("-")[1])));
  • toArray:转化为数组
String[] strings = lines.stream().toArray(val -> new String[val]);
  • reduce:收纳
List<Integer> asList = Arrays.asList(1, 2, 3, 4, 5);

// 示例1: 求和
Optional<Integer> sum = asList.stream()
        .reduce(Integer::sum);
System.out.println("和: " + sum.orElse(0));

// 示例2: 求乘积
Optional<Integer> product = asList.stream()
        .reduce((x, y) -> x * y);
System.out.println("乘积: " + product.orElse(1));

// 示例3: 求最大值
Optional<Integer> max = asList.stream()
        .reduce(Integer::max);
System.out.println("最大: " + max.orElse(0));

输出
和: 15
乘积: 120
最大: 5

注意事项

  • 惰性求值:如果没有终结操作(终结函数),中间操作是不会得到执行的,即没有任何输出。

  • 流的一次性:一旦一个流对象经过一个终结操作后,这个流就不能再被使用了,只能重新创建流对象再使用。

  • 不会影响原数据:我们在流中可以对数据做很多处理,正常是不会影响原来集合中的元素的。


http://www.kler.cn/a/321749.html

相关文章:

  • Flink Job更新和恢复
  • 【Rust 编程语言工具】rustup-init.exe 安装与使用指南
  • 力扣-Mysql-3308- 寻找表现最佳的司机(中等)
  • 微服务day08
  • 《Python网络安全项目实战》项目5 编写网站扫描程序
  • 将Excel文件的两个表格经过验证后分别读取到Excel表和数据库
  • CMMI认证的好处主要体现在以下这些方面
  • MYSQL SWAP 内存 vm.swappiness
  • PPP点对点协议(Point-to-Point Protocol)
  • 【RabbitMQ 项目】服务端:服务器模块
  • 26 基于STM32的智能门禁系统(指纹、蓝牙、刷卡、OLED、电机)
  • Python新手学习过程记录之基础环境:环境变量、版本区分、虚拟环境
  • 系列一、安装oracle11g
  • Snapchat API 访问:Objective-C 实现示例
  • nodejs 014: React.FC 与 Evergreen(常青树) React UI 框架的的Dialog组件
  • 求n的阶乘的相反数(c语言)
  • Flask 实现登录状态持久化:让用户 1 天内无需重新登录
  • SpringBoot实现自定义Redis的连接
  • 如何将二氧化碳“封”入海底?
  • 顶象滑块、顶象验证码就这?2024-09-27 最新版(持续更新)确定不点进来看看?看到就是赚到
  • 【心灵解药】面对烦躁不安,这几招让你瞬间找回宁静与平和!
  • scrapy之setting文件详解
  • 更新 Git 软件
  • modbus 的float与uint_16的转换
  • 双十一有哪些数码家电值得入手?双十一五款必入手名单大曝光
  • Python 入门(一、使用 VSCode 开发 Python 环境搭建)