首页 > 其他分享 >stream流的常用操作

stream流的常用操作

时间:2024-02-04 14:01:39浏览次数:24  
标签:常用 stream Stream 元素 接口 使用 操作

Stream流的一些操作

这段时间在项目开发中使用到Java8 的 Stream流操作发现真的特别方便,这里总结了一些常用的stream流操作.

1 简介

在使用Stream流之前先来简单介绍一下:

1 Stream事java8才提供的一种以流的方式来处理数据集的一种手段,凡是属于Collection接口之下的所有字类或者子接口都可以使用Collection.stream()方法来获取到一个流对象;

2 Java8的API有提到过每一个Colection的Stream流只能执行一次,如果想要再次执行只能重现创建,因为Stream流默认会在执行后自动关闭流

(这一点查看API可以发现其实Stream接口extends了BaseStream接口,而BaseStream接口又extends了AutoColseable接口,所以不需要我们每次使用之后手动关闭流)

3 Stream屏蔽了直接操作集合中某一个元素的遍历方式,而是更关心对元素集合的聚合操作计算(比如分组,求和,排序,筛选等操作);

4 虽然不能直接操作某一个元素,但是我们可以使用BaseStream.iterator()方法对每一个元素进行迭代,使用BaseStream.spliterator()方法对元素的拼接操作等;

如果看API可能会觉得有点懵逼,但是其实我们可以简单的进行理解

Stream就是提供了一种对Collection集合中元素进行聚合操作的一种工具,我们使用Stream流可以完成SQL层面上几乎所有聚合函数操作,以及过滤等操作;

使用Stream流避免了我们使用循环去操作元素然后进行聚合的麻烦;

大致就是这个意思,如果你使用Stream流的时候得心应手,对你的代码效率和时间效率都会大大提高,所以在操作集合元素之前首先考虑能不能使用Stream流来完成是一个不错的选择,可能会避免你出现很多错误;

当然如果你jdk不支持当我没说!!!

2 常用操作

常用操作就不再一一举例子和详细说明了,都是API我就只写例子,只要有点java基础的一看就能明白什么意思

2.1 根据某一字段分组

Map<String, List<IotHzsStB>> listMap = list.stream().collect(Collectors.groupingBy(IotHzsStB::getSttp));

2.2 抽取某一个字段

List<Long> collect = menuList.stream().map(SysMenu::getId).collect(Collectors.toList());

2.3 过滤

Long tYellAlarmNum = iotAlarmS.stream().filter(item -> item.getAlarmType().equals(ConstantEnum.IOT_ALARM_TYPE_1.getValue())).filter(item -> item.getLevel().equals(ConstantEnum.IOT_ALARM_LEVEL_0.getValue())).count();

2.4 排序(多字段)

returnList = returnList.stream().sorted(Comparator.comparing(IotPpJcResponse::getDrp,Comparator.reverseOrder()).thenComparing(IotPpJcResponse::getAddvcd,Comparator.reverseOrder())).collect(Collectors.toList());

2.5 取出第一个集合中第一个元素

list.stream().findFirst().get();

2.6 是否匹配(有一个匹配就是true)

boolean isAdmin = sysUserRoleList.stream().anyMatch(r -> "admin".equalsIgnoreCase(r.getRoleCode()));

2.7 是否匹配(所有元素都匹配返回true)

boolean isAdmin = sysUserRoleList.stream().allMatch(r -> "admin".equalsIgnoreCase(r.getRoleCode()));

2.8 是否匹配(都不匹配返回true)

boolean isAdmin = sysUserRoleList.stream().noneMatch(r -> "admin".equalsIgnoreCase(r.getRoleCode()));

3 结束语

暂时就这么多吧 ,因为这几个见到的次数比较多一点,当然还有很多常用操作没有记录,后期遇到再进行补充

上面有的操作可能涉及好多个子操作,比如过滤中使用到了count()统计等等。

标签:常用,stream,Stream,元素,接口,使用,操作
From: https://www.cnblogs.com/mrkay/p/18006064

相关文章

  • 【Python】conda常用命令
    ✨conda下载AnacondaFreeDownload|AnacondaMinicondaMiniconda—minicondadocumentation个人推荐安装Miniconda即可反正我从来没有使用过Anaconda的GUI✨conda基本命令新建环境condacreate-n${envName}python=3.8-n新建环境名称python=3.8可选指定Py......
  • 推荐四款常用测试数据生成工具(适用自动化测试、性能测试)
    一、前言在软件测试中,测试数据是测试用例的基础,对测试结果的准确性和全面性有着至关重要的影响。因此,在进行软件测试时,需要生成测试数据以满足测试场景和要求。本文将介绍如何利用测试数据生成工具来快速生成大量的测试数据。二、测试数据生成工具今天给大家介绍四款常用的数......
  • ACM常用模板
    usefulskill连续区间求和llsum(lll,llr){return(l+r)*(r-l+1)/2;}内置位运算__builtin_ffs(x):返回x中最后一个为1的位是从后向前的第几位,如__builtin_ffs(0x789)=1,__builtin_ffs(0x78c)=3。于是,__builtin_ffs(x)-1就是x中最后一个为1的位的位置。__buil......
  • java直连mysql操作数据
    连接器importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;/***@author:chenKeFeng*@date:2024/1/3010:21*/publicclassMySQLConnector{pri......
  • python操作yaml
     补充:yaml语法详见:yaml语法 yaml应用场景1、保存自动化测试数据2、保存自动化测试中的关联数据  安装yaml模块pipinstallpyyaml==5.4.1 读取yaml数据读取数据:load()或者full_load(),返回一个对象用例数据:case.yaml-caseId:1apiName:registerdescribe:注册url:......
  • Kafka-常用命令行命令
    第一章Kafka常用命令1. Topic(主题)1.1. 创建Topicbin/kafka-topics.sh--create--bootstrap-serverhadoop01:9092 --replication-factor2 --partitions1 --topictest 1.2. 查询Topic列表1.2.1. 查询所有Topic列表bin/kafka-topics.sh--list--bootstrap-ser......
  • Python 基于pymongo操作Mongodb学习总结
    实践环境Python3.6.4pymongo4.1.1pymongo-3.12.3-cp36-cp36m-win_amd64.whl下载地址:https://pypi.org/simple/pymongo/代码实践#!/usr/bin/envpython#-*-coding:utf-8-*-importdatetimeimportrandomimportpymongofrompymongoimportMongoClientfrombson.objecti......
  • MyBatis的常用动态标签
    1、<sql><!--<sqlid=""></sql>:设置一段SQL片段,即公共SQL,可以被当前映射文件中所有的SQL语句所访问<includerefid="empColumns"></include>:访问某个SQL片段--><sqlid="empColumns">selecteid,ename,age,sex,d......
  • CTFer——文件操作与upload-labs解析
    一、什么是webshellwebshell就是以aspx、php、jsp等网页文件形式存在的一种命令环境也可以将其称为一种网页后门 黑客在入侵网站后,通常会将jsp、aspx或php后门文件与网站服务器web目录下正常的网页文件混在一起然后就可以使用浏览器来访问后门文件,得到一个命令执行环境,以达......
  • lua 语法介绍与 NGINX lua 高级用法实战操作
    目录一、概述二、lua安装三、lua语法1)lua数据类型2)lua变量3)lua拼接字符串4)lua循环5)lua函数6)lua条件控制7)lua库模块四、NGINXlua高级用法一、概述lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活......