Java学习笔记44——Stream流

Stream流

    • 体验Stream流
    • Stream流的生成方式
      • ColLection体系的集合可以使用默认方法stream ()生成流
      • Map体系的集合间接的生成流
      • 数组可以通过stream接口的静态方法of (T... values)生成流
    • Stream流的中间操作方法
      • Stream<T> filter(Predicate predicate)
      • Stream<T>limit(long maxSize)和Stream<T>skip(long n)
      • static<T>Stream<T>concat(StreamaStream b)和Stream<T>distinct()
      • Stream<T>sorted()和Stream<T>sorted(Comparatorcomparator)
      • <R>Stream<R>map(Function mapper)和IntStream mapTolnt(TolntFunction mapper)
    • Stream流中常见的终结操作
      • void forEach(Consumeraction)和long count( )
    • Stream流中的收集方法

体验Stream流

需求:按照下面的要求完成集合的创建和遍历

  • 创建一个集合,存储多个字符串元素
  • 把集合中所有以”灿”开头的元素存储到一个新的集合
  • 把”灿”开头的集合中的长度为2的元素存储到一个新的集合
  • 遍历上一步得到的集合

import java.util.ArrayList;public class StreamDemo {public static void main(String[] args) {ArrayList<String> list=new ArrayList<String>();list.add("伦伦");list.add("壮壮");list.add("昊昊");list.add("灿灿");list.add("灿灿灿");ArrayList<String> cList=new ArrayList<>();for (String s:list){if(s.startsWith("灿"))cList.add(s);}System.out.println(cList);ArrayList<String> twoList=new ArrayList<>();for (String s:cList){if(s.length()==2)twoList.add(s);}for (String s:twoList) {System.out.println(s);}System.out.println("--------");//Stream改进list.stream().filter(s->s.startsWith("灿")).filter(s->s.length()==2).forEach(System.out::println);}
}

Stream流的生成方式

  • Stream流的使用
    • 生成流
      通过数据源(集合数组等)生成流
      list.stream()
  • 中间操作
    • 一个流后面可以跟随零个或多个中间操作,其目的主要是打开流,做出某种程度的数据过滤/映射,然后返回一个新的流
    • 交给下一个操作使用
    • filte()
  • 终结操作
    • 一个流只能有一个终结操作,当这个操作执行后,流就被使用“光”了,无法再被操作。所以这必定是流的最后一个操作
    • forEach()

ColLection体系的集合可以使用默认方法stream ()生成流

default Stream stream ()

public class StreamDemo {public static void main(String[] args) {List<String> list=new ArrayList<String>();Stream<String> listStream = list.stream();Set<String> set=new HashSet<String>();Stream<String> setStream = set.stream();}
}

Map体系的集合间接的生成流

public class StreamDemo {public static void main(String[] args) {Map<String,Integer> map=new HashMap<String,Integer>();Stream<String> keyStream = map.keySet().stream();Stream<Integer> valueStream = map.values().stream();Stream<Map.Entry<String, Integer>> entryStream = map.entrySet().stream();}
}

数组可以通过stream接口的静态方法of (T… values)生成流

public class StreamDemo {public static void main(String[] args) {String[] strArray={"Hello","world","java!"};Stream<String> strArrayStream = Stream.of(strArray);Stream<String> strArrayStream2 = Stream.of("Hello","world","java!");Stream<Integer> intArrayStream = Stream.of(1,2,3);}
}

Stream流的中间操作方法

Stream filter(Predicate predicate)

用于对流中的数据进行过滤

  • Predicate接口中的方法
  • boolean test(T t): 对给定的参数进行判断,返回一个布尔值
public class StreamDemo {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();list.add("李日天");list.add("朱大壮");list.add("涂狗子");list.stream().filter(s->s.startsWith("李")).forEach(System.out::println);list.stream().filter(s->s.length()==3).forEach(System.out::println);list.stream().filter(s->s.startsWith("李")).filter(s->s.length()==3).forEach(System.out::println);}
}

Streamlimit(long maxSize)和Streamskip(long n)

  • Streamlimit(long maxSize): 返回此流中的元素组成的流,截取前指定参数个数的数据

  • Streamskip(long n):跳过指定参数个数的数据,返回由该流的剩余元素组成的流

public class StreamDemo {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();list.add("李日天");list.add("朱大壮");list.add("涂狗子");list.add("杨天花");list.stream().limit(3).forEach(System.out::println);list.stream().skip(3).forEach(System.out::println);}
}

staticStreamconcat(StreamaStream b)和Streamdistinct()

  • staticStreamconcat(StreamaStream b):合并a和b两个流为一个流
  • Streamdistinct(): 返回该流的不同元素(根据Objectequals(Object)) 组成的流
public class StreamDemo {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();list.add("李日天");list.add("朱大壮");list.add("涂狗子");list.add("杨天花");Stream<String> s1=list.stream().limit(3);Stream<String> s2=list.stream().skip(1);//        Stream.concat(s1,s2).forEach(System.out::println);Stream.concat(s1,s2).distinct().forEach(System.out::println);}
}

Streamsorted()和Streamsorted(Comparatorcomparator)

  • Streamsorted():返回由此流的元素组成的流,根据自然顺序排序
  • Streamsorted(Comparatorcomparator): 返回由该流的元素组成的流,根据提供的Comparator进行排序
public class StreamDemo {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();list.add("lhao");list.add("zdzhaung");list.add("tgouzi");list.add("ytianhua");list.stream().sorted().forEach(System.out::println);list.stream().sorted((s1,s2)->{int num=s1.length()-s2.length();int num2=num==0?s1.compareTo(s2):num;return num2;}).forEach(System.out::println);}
}

Streammap(Function mapper)和IntStream mapTolnt(TolntFunction mapper)

  • Streammap(Function mapper): 返回由给定函数应用于此流的元素的结果组成的流
    • Function接口中的方法 R apply(Tt)
  • IntStream mapTolnt(TolntFunction mapper): 返回一ntStream其中包含将给定函数应用于此流的元素的结果
    • IntStream:表示原始int流
    • TolntFunction接口中的方法
    • int applyAslnt(T value)
public class StreamDemo {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();list.add("10");list.add("20");list.add("30");list.add("40");list.stream().map(s->Integer.parseInt(s)).forEach(System.out::println);list.stream().map(Integer::parseInt).forEach(System.out::println);list.stream().mapToInt(Integer::parseInt).forEach(System.out::println);//返回IntStream流int res=list.stream().mapToInt(Integer::parseInt).sum();//IntStream仅有的方法,sumSystem.out.println(res);}
}

Stream流中常见的终结操作

void forEach(Consumeraction)和long count( )

  • void forEach(Consumeraction):对此流的每个元素执行操作
    • Consumer接口中的方法 void accept(T t):对给定的参数执行此操作
  • long count():返回此流中的元素数
public class StreamDemo {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("lhao");list.add("zdzhaung");list.add("tgouzi");list.add("ytianhua");list.stream().forEach(System.out::println);long count = list.stream().filter(s -> s.startsWith("y")).count();System.out.println(count);}
}

Stream流中的收集方法

R collect(Collector collector)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/154419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

clusterProfiler包学习

&#x1f4d6; Introduction | Biomedical Knowledge Mining using GOSemSim and clusterProfiler (yulab-smu.top) 部分使用 #GO classificationlibrary(clusterProfiler) data(geneList, package"DOSE") gene <- names(geneList)[abs(geneList) > 2]# Entre…

【C++上层应用】7. Web编程*

文章目录 【 1. CGI 简介 】【 2. Web浏览 】 【 1. CGI 简介 】 公共网关接口&#xff08;Common Gateway Interface&#xff0c;CGI&#xff09;&#xff0c;是一套标准&#xff0c;定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的。CGI 规范目前是由 NCSA 维护的…

在Spring Boot中使用Thymeleaf开发Web页面

引言&#xff1a; 为啥写这篇文章呢&#xff1f;我明明就没怎么用过这个Thymeleaf进行web开发&#xff0c;用JSP也行&#xff0c;三剑客也行&#xff0c;或者Vue&#xff0c;React&#xff0c;PHP等等&#xff0c;不好吗&#xff1f; 那我为啥写这篇博客呢&#xff1f;这个写了…

基于安卓android微信小程序的刷题系统

项目介绍 面试刷题系统的开发过程中&#xff0c;采用B / S架构&#xff0c;主要使用jsp技术进行开发&#xff0c;中间件服务器是Tomcat服务器&#xff0c;使用Mysql数据库和Eclipse开发环境。该面试刷题系统包括会员、答题录入员和管理员。其主要功能包括管理员&#xff1a;个…

Oracle-分析函数(累计求和,排序等)

在Oracle中分析函数又称为开窗函数 分为以下两类&#xff1a; 第一类&#xff1a;是聚合分析函数&#xff0c;主要包含&#xff08;sum&#xff0c;count&#xff0c;AVG、MAX、MIN等&#xff09;&#xff0c;主要是对内部分组的数值按照要求内部聚合处理&#xff1b; 第二类&a…

开发《猫咪攻略》小游戏的意义

开发《猫咪攻略》小游戏的意义有以下几点&#xff1a; 学习和掌握游戏开发的基本技能&#xff1a;通过开发《猫咪攻略》小游戏&#xff0c;可以学习和掌握游戏开发的基本技能&#xff0c;包括游戏策划、游戏设计、游戏编程和游戏测试等方面的技能。增强对猫咪的了解和认识&…

【Linux系统化学习】进程的状态 | 僵尸进程 | 孤儿进程

个人主页点击直达&#xff1a;小白不是程序媛 Linux专栏&#xff1a;Linux系统化学习 目录 操作系统进程的状态 运行状态 阻塞状态 进程阻塞的现象 挂起阻塞状态 Linux进程状态 Linux内核源代码怎么说 R&#xff08;running状态&#xff09;运行状态 S&#xff08;sl…

关于漏洞:检测到目标SSL证书已过期【原理扫描】

这个漏洞是监听443端口的&#xff0c;如果我们是正式的网站且使用了https那么更新证书即可。 但是我的服务器上面几乎是个空服务器&#xff0c;谁会用443呢&#xff1f; 找不到谁用了那我就部署一个nginx&#xff0c;用nginx代理443&#xff0c;找个证书配一下呗。 然而当我…

CNN卷积神经网络Python实现

import torch from torch import nn# ①定义互相关运算 def corr2d(X, K):"""计算二维互相关运算。"""# 获取K的形状 行为h,列为wh, w K.shape# 生成全0的矩阵&#xff0c;行为X的行减去h加上1&#xff0c;列为X的列减去w加上1Y torch.zeros((…

rabbit MQ的延迟队列处理模型示例(基于SpringBoot)

说明&#xff1a; 生产者P 往交换机X&#xff08;typedirect&#xff09;会发送两种消息&#xff1a;一、routingKeyXA的消息&#xff08;消息存活周期10s&#xff09;&#xff0c;被队列QA队列绑定入列&#xff1b;一、routingKeyXB的消息&#xff08;消息存活周期40s&#xf…

Prolog 中的逻辑探险:学习9组逻辑蕴涵公式

引言 上次写了16组等价公式定律,今天继续用Prolog写9组逻辑蕴涵公式。 感觉这些公式的名称与公式挺难一一对应来记忆的,只能多练习了. 1. 附加律 (Addition) A ⇒ A∨B 当你拿到一个苹果&#xff08;A&#xff09;&#xff0c;突然你知道&#xff0c;即使有了梨&#xff08;…

用向量数据库Milvus Cloud搭建GPT大模型+私有知识库的定制商业文案助手

随着智能助手的不断普及和发展,商业文案的创作也变得更加智能化和定制化。在这个信息爆炸的时代,商业文案的撰写已经不再是简单的文字表达,而是需要结合大数据分析和人工智能技术,以更好地满足目标客群的需求。在本文中,我们将介绍如何利用向量数据库Milvus Cloud搭建GPT大…

Nosql的redis概述及基本操作

关系数据库与非关系型数据库概述 关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。SQL语句(标准数据查询语言)就是一种基于关系型数据库的语言&#xff0c;用于执行对关系型…

tokenizers Tokenizer 类

Tokenizer 类 依赖安装 pip install tensorflow pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple基类原型 tokenizers.Tokenizer(model)基类说明 Tokenizer 函数构造一个分词器对象。分词方式主要有word-level、subword-level、char-level三种&#x…

3.什么是Spring IOC 容器?有什么作用?

什么是Spring IOC 容器 控制反转即IoC (Inversion of Control)&#xff0c;它把传统上由程序代码直接操控的对象的调用权交给容器&#xff0c;通过容器来实现对 象组件的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移&#xff0c;从程序代码本身转移到了外部…

软件测试/人工智能丨人工智能取代软件测试团队

在数字时代&#xff0c;人工智能&#xff08;AI&#xff09;和软件测试如同两位不同领域的英雄&#xff0c;各自拥有独特的技能和力量。然而&#xff0c;当这两者碰撞在一起时&#xff0c;究竟会擦出怎样的火花呢&#xff1f;让我们进入这场奇妙的对决&#xff0c;探索AI如何改…

如何快速让苹果TF上架

苹果TF上架是一个相对复杂的过程&#xff0c;需要经过多个步骤和审核环节。以下是一些建议&#xff0c;可以帮助你快速让苹果TF上架&#xff1a; 确保应用程序符合苹果的审核指南和规则。在提交应用程序之前&#xff0c;仔细阅读苹果的审核指南&#xff0c;并确保你的应用程序…

MFC项目添加CUDA支持

文章目录 前言一、开启项目CUDA支持二、链接CUDA库三、链接cu文件 前言 我目前的项目状况是&#xff1a; 拥有一个MFC项目&#xff1b;拥有现成的 .cuh文件 和 .cu文件。 我想做的是&#xff1a;将.cuh和.cu文件放到我的项目中&#xff0c;并且编译成功跑起来 一、开启项目C…

如何使用清华源镜像下载python相关的包?

目的&#xff1a;当使用pip3默认安装python相关插件遇到网络不可达问题时&#xff0c;更换镜像源尝试下载&#xff5e; &#xff03;使用如下命令&#xff0c;以下网址都是Python Package Index (PyPI)的一个镜像站点 ##########清华 pip3 install 包名 -i https://pypi.tuna.…

【python学习】基础篇-常用函数-sorted() 对可迭代对象进行排序

sorted()函数是Python中的内置函数&#xff0c;用于对可迭代对象进行排序操作。 它会返回一个新的已排序的列表&#xff0c;而不会修改原始的可迭代对象。 sorted()函数的基本语法如下&#xff1a; sorted(iterable, keyNone, reverseFalse)参数说明&#xff1a; iterable:表…