Java Stream流编程入门

news/2024/9/29 3:22:03/

流式编程

在这里插入图片描述

stream流式编程分为

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

怎么转化为stream

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

常用中间函数

注:中间函数可连接多个

  • filter:过滤
java">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:将流中的每个元素传入给定的函数,得到一个新的流。
java">Stream.of("a","b","c","d").map(String::toUpperCase).forEach(System.out::print);

输出:ABCD

  • limit:取前n个
java">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个
java">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()
java">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:合并两个流
java">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: 排序
java">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:收集
java">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:转化为数组
java">String[] strings = lines.stream().toArray(val -> new String[val]);
  • reduce:收纳
java">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.ppmy.cn/news/1531127.html

相关文章

智能手机取证: 专家如何从被锁定设备中提取数据?

在数字取证领域&#xff0c;从被锁定的手机中检索数据的能力是决定调查成功与否的关键技能。由于智能手机往往是解决复杂案件的关键&#xff0c;智能手机取证已经成为打击犯罪和恐怖主义战争中的一个关键组成部分。通话记录、短信、电子邮件&#xff0c;甚至位置数据都可能被发…

golang如何把微信支付结构体拼接为对参数按照key=value的格式,并按照参数名ASCII字典序排序

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…

Django Web开发基础介绍

概述 Django 是后端Python的 Web 开发框架&#xff0c;主要任务是处理与服务器和数据库相关的事务&#xff0c;模板渲染动态生成网页内容只是其中一部分。 Django 内置了的模板引擎&#xff0c;可以将 HTML 页面与 Python 代码进行分离。模板引擎提供了丰富的模板标签和过滤器…

大数据新视界 --大数据大厂之HBase 在大数据存储中的应用与表结构设计

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

python是什么语言写的

Python是一种计算机程序设计语言。是一种面向对象的动态类型语言。现今Python语言很火&#xff0c;可有人提问&#xff0c;这么火的语言它的底层又是什么语言编写的呢&#xff1f; python是C语言编写的&#xff0c;它有很多包也是用C语言写的。 所以说&#xff0c;C语言还是很…

使用python爬取豆瓣网站?如何简单的爬取豆瓣网站?

1.对python爬虫的看法 首先说说我对python的看法&#xff0c;我的专业是大数据&#xff0c;我从事的工作是java开发&#xff0c;但是在工作之余&#xff0c;我对python又很感兴趣&#xff0c;因为我觉得python是一门很好的语言&#xff0c;第一&#xff1a;它可以用来爬取数据…

性能优化与资源管理:优化Selenium脚本的执行效率,合理管理浏览器实例和系统资源

目录 引言 一、Selenium基础与常用方法 1.1 Selenium简介 1.2 Selenium基础用法 二、Selenium性能优化技巧 2.1 使用WebDriverWait实现显式等待 2.2 启用无头模式 2.3 设置合理的页面加载策略 2.4 禁用图片和JavaScript加载 2.5 优化元素定位 2.6 合理使用隐式等待和…

828华为云征文 | 在华为云X实例上安装部署企业Wiki知识分享平台的实践

目录 前言 1. 华为云X实例介绍 1.1 华为云Flexus云服务概述 1.2 Flexus云服务器X实例的特点 2. MM-Wiki知识分享平台介绍 2.1 什么是MM-Wiki 2.2 MM-Wiki的功能特点 3. 安装部署环境 4. MM-Wiki安装部署步骤 4.1 下载与准备工作 4.2 安装MM-Wiki 4.3 启动与运行 5…