首页 > 编程语言 >为什么要使用Java Stream API?

为什么要使用Java Stream API?

时间:2022-11-26 10:33:50浏览次数:30  
标签:count Java Stream nums int 元素 num API

Stream是Java8提供的一种更加简便的,对集合类型数据结构的处理API。

这里的集合类型数据结构包括各种数组(int[]/String[]等),也包括CollectionMap等实现类。

1 传统方式操作集合

在处理集合类型数据结构时,我们通常会遍历得到每个元素,对每个元素进行处理。操作维度在元素的层面。

例如,我们需要统计一串数字中的奇数。

如果是数组数据结构

int[] nums = new int[]{1,2,3,4,5,6,7,8,9};
int count = 0;
for(int i = 0; i < nums.length; ++i) {
    // 1、遍历得到每个元素
    int num = nums[i];
    // 2、对每个元素进行处理
    if (num % 2 == 1) {
        ++count;
    }
}

如果是List数据结构

List<Integer> nums = Arrays.asList(1,2,3,4,5,6,7,8,9);
Iterator<Integer> iterator = nums.iterator();
int count = 0;
while(iterator.hasNext()) {
    // 1、遍历得到每个元素
    int num = iterator.next();
    // 2、对每个元素进行处理
    if (num % 2 == 1) {
        ++count;
    }
}

使用增强for循环:

int count = 0;
// 1、遍历得到每个元素
for(int num: nums) {
    // 2、对每个元素进行处理
    if(num % 2 == 1) {
        ++count;
    }
}

2 Stream操作集合

在使用Stream操作集合类型数据结构时,操作维度在层面。

例如,对于上述例子,使用Stream进行相同的操作可能如下:

// 1、获取原始数组的流
IntStream intStream = Arrays.stream(nums);
// 2、获取过滤后的流
IntStream filterStream = intStream.filter(num -> num % 2 == 1);
// 3、统计过滤后的流中元素的个数
long count = filterStream.count();

看上去也需要很多行代码,但其实Stream的操作都是链式的,它还可以写成这样:

long count = Arrays.stream(nums).filter(num -> num % 2 == 1).count();

3 比较

我们可以明显感觉到传统方式和Stream API操作集合类型数据结构的区别。

传统方式的操作维度在元素的层面:

  • 遍历获取每个元素。
  • 针对每个元素进行操作。

Stream的操作维度在的层面:

  • 根据集合类型数据结构创建Stream
  • 每次对旧Stream操作后会得到新的Stream
  • 对最后一个Stream进行统计/收集等操作,获得最终结果。

Stream最大的特点是,它是链式操作,可以将多个业务逻辑清晰地分割成多个中间操作。例如,我们可以先去重(distinct()),然后过滤filter(),最后排序(sort())。

此外,Stream内部封装了许多模板式代码,通过结合lambda表达式,极大地简化地代码。

因此,在使用Stream操作集合时,可以以更高的维度、更简洁的代码、更清晰的业务逻辑进行业务处理,使用起来十分顺畅。

标签:count,Java,Stream,nums,int,元素,num,API
From: https://www.cnblogs.com/Xianhuii/p/16927012.html

相关文章

  • 深入剖析Java Stream底层源码
    1Stream的使用在深入学习Stream的本质之前,我们需要先熟悉Stream的使用规则。对Stream有了整体的认识之后,才能更好的理解它的本质。1.1使用步骤使用Stream只需要遵循3......
  • 高德地图JS API示例标记点 拿来即用
    使用最新高德JSAPI2.0先看效果在官方示例基础上做了些改动很多控件在初始化添加即可:如小窗口,指南针等,根据自己的需要加吧html代码<!doctypehtml><html><head>......
  • Java.11.26
    一1..breakcontinue1.1.break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switc......
  • java使用Jsch/ssh2实现从linux服务端遍历文件名以及文件内容回显到客户端
    java使用Jsch/ssh2实现从linux服务端遍历文件名以及文件内容回显到客户端这里只我上传的是测试类,需改下参数直接用就行。jsch依赖: <dependency>            ......
  • Java connect to SSH2
    GanymedSSH-2(ch.ethz.ssh2)爱码者于 2020-09-2111:17:18 发布6102 收藏 10分类专栏: 项目实践版权 项目实践专栏收录该内容15篇文章0订阅订阅......
  • 实验7:基于REST API的SDN北向应用实践
    实验7:基于RESTAPI的SDN北向应用实践一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。二、实验......
  • P3627 [APIO2009] 抢掠计划
    从起点S到终点T,求一条路线获得最多的收益(每个点收益a[i]),可以重复通过路和点 裸题#include<bits/stdc++.h>usingnamespacestd;constintN=5e5+2;int......
  • java简单解析wsdl文件
    1packagecom.example.demo.api.soap.client.userInterface.controller;234importorg.w3c.dom.Document;5importorg.w3c.dom.NamedNodeMap;6importor......
  • Java JDK11的下载与安装
    前言本篇文章是基于win10系统下载安装JDK11的教程。1.下载OracleJDK进入Oracle官网:https://www.oracle.com/java/technologies/downloads/#java11选择Java11→Winodws→......
  • Java8新特性
    Java8NashornJavaScriptJava8新特性Java8新特性Nashorn一个javascript引擎。NashornJavaScriptEngine在Java15已经不可用了。这已经在Java11标记为:@de......