首页 > 其他分享 >Stream Api

Stream Api

时间:2023-09-17 14:31:42浏览次数:40  
标签:Stream stream System Api forEach println strings out

作用:处理集合和数组等数据。java8引入的

特点:

  • 基于数据源的一种元素序列,可以通过数据源的元素,进行某种操作,比如:过滤、排序、映射等。这些操作不会修改元数据的内容。
  • 流支持链式调用,每次操作都会返回一个新的流对象,可以连续操作。
  • 流操作可以分为两类:中间操作和终端操作,中间操作是指,对流中的元素进行某种转换或筛选,然后返还一个新的流对象,终端操作是指对流进行最终操作,比如:计算、收集并返回结果。
  • 流是可以串行或并行的,在并行流中,多个线程可以同时处理不同的流元素,从而提高程序的效率和性能。

使用:

  • 创建一个流
  • 使用中间方法
  • 使用终端方法

API:

获取Stream流的方法:

Stream Api_System

package com.pjk.demo;

import java.util.*;
import java.util.stream.Stream;

public class Demo_Stream {
   public static void main(String[] args) {
       //1.单列集合获取strean流 单列集合有 list set 等等
       //2.先创建一个单列集合
       ArrayList<String> strings = new ArrayList<>();
       //3.使用collections工具给单列集合添加元素
       Collections.addAll(strings, "a", "b", "c", "d", "e");
       //4.使用stream流的中间方法获取数据
       strings.stream().forEach(System.out::println);

       System.out.println("------------------------------------");

       //5.双列集合
       HashMap<String, String> map = new HashMap<>();
       map.put("aaa", "111");
       map.put("bbb", "222");
       map.put("ccc", "333");
       map.put("ddd", "444");
       map.put("eee", "555");
       map.put("fff", "666");

       // get stream
       Set<String> keySet = map.keySet();
       keySet.stream().forEach(System.out::println);

       System.out.println("------------------------------------");

       Set<Map.Entry<String, String>> entries = map.entrySet();
       entries.stream().forEach(System.out::println);


       System.out.println("------------------------------------");
       //数组获取 stram流
       int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
       Arrays.stream(arr).forEach(System.out::println);

       System.out.println("------------------------------------");

       //零散数据 使用 stream流
       Stream.of(1, 2, 3, 4, 5).forEach(System.out::println);

  }
}

stream流的中间方法:

Stream Api_java_02

package com.pjk.demo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.stream.Stream;

//stream 中间方法
public class Demo_StreamMiddle {
   public static void main(String[] args) {
       ArrayList<String> strings = new ArrayList<>();
       Collections.addAll(strings, "张三","张思","张思","张思", "张无忌", "李四", "王五", "赵六", "张三丰");
       //过滤
       strings.stream().filter(s->s.startsWith("张")).filter(s -> s.length()==3).forEach(System.out::println);
       System.out.println("----------------------");
       //获取前几个
       strings.stream().limit(3).forEach(System.out::println);
       System.out.println("----------------------");
       //跳过
       strings.stream().skip(4).forEach(System.out::println);
       System.out.println("----------------------");
       //去重
       strings.stream().distinct().forEach(System.out::println);
       System.out.println("----------------------");
       //concat合并流
       ArrayList<String> stringsNew = new ArrayList<>();
       Collections.addAll(stringsNew, "吴三","吴思");
       Stream.concat(strings.stream(),stringsNew.stream()).forEach(System.out::println);
       System.out.println("----------------------");
       //类型转换
       ArrayList<String> nameAge = new ArrayList<>();
       Collections.addAll(nameAge,"zhangsan-10","lisi-11","wangwu-12");
       nameAge.stream()
              .map(s->Integer.parseInt(s.split("-")[1]))
              .forEach(System.out::println);


  }
}

stream的终结方法:

Stream Api_System_03

package com.pjk.demo;

import java.util.*;
import java.util.stream.Collectors;

/**
* @author PJK
* stream流终结方法
*/
public class Demo_StreamEnd {
   public static void main(String[] args) {
       ArrayList<String> strings = new ArrayList<>();
       Collections.addAll(strings,"a","b","c");
       //遍历
       strings.stream().forEach(System.out::println);
       //统计
       long count = strings.stream().count();
       System.out.println(count);
       //收集到数组
       String[] array = strings.stream().toArray(String[]::new);
       System.out.println(Arrays.toString(array));
       System.out.println("-------------------");
       //收集到集合里
       ArrayList<String> nameGenderAge = new ArrayList<>();
       Collections.addAll(nameGenderAge,"张三-男-18","张四-男-19","张二-女-17","张大-女-21","张无-男-19","张高楼大厦科技-男-37");
       nameGenderAge.stream().filter(s -> "男".equals(s.split("-")[1])).forEach(System.out::println);
       System.out.println("------------------------");
       List<String> collect = nameGenderAge.stream()
              .filter(s -> "男".equals(s.split("-")[1]))
              .collect(Collectors.toList());
       System.out.println(collect);

       System.out.println("-----------------");
       //收集到set集合
       Set<String> set = nameGenderAge.stream().filter(s -> "男".equals(s.split("-")[1]))
              .collect(Collectors.toSet());
       System.out.println(set);

       System.out.println("-------------------");
       //收集到map当中
       Map<String, Integer> map = nameGenderAge.stream()
              .filter(s -> "男".equals(s.split("-")[1]))
              .collect(Collectors.toMap(
                       s -> s.split("-")[0],
                       s -> Integer.parseInt(s.split("-")[2])
              ));

       System.out.println(map);
       
       
       
       System.out.println(map);
       System.out.println("---------------------");
       //并行流
       nameGenderAge.parallelStream().forEach(System.out::println);//这里的数据量小 体现不出速度 只是简单说下
  }


}



标签:Stream,stream,System,Api,forEach,println,strings,out
From: https://blog.51cto.com/u_16205743/7501972

相关文章

  • API商品数据接口:实现电子商务应用程序的核心功能
    随着电子商务的飞速发展,许多电商平台都提供了应用程序接口(API),允许开发者调用特定的功能,如商品查询、购物车管理、订单处理以及支付等。这些API为开发者提供了在应用程序中嵌入电商功能的机会,从而为用户提供更加便捷的购物体验。本文将深入探讨API商品数据接口的相关概念、实现方法......
  • K8S你学废了么5——Secret与downloadAPI
    一、背景介绍前面介绍的k8s中的pv存储卷与cm存储卷,k8s中还有2中特殊的存储卷:secret和downloadAPI。其作用分别是用来存放敏感信息和将pod中的信息暴漏给pod中运行的代码,这也是k8s中经常会用到的两个存储卷,下面就这两个存储卷展开详细说明。二、Secret存储卷尽管configMap资源也可以......
  • FastAPI学习-15.JSON 编码器 jsonable_encoder
    前言在某些情况下,您可能需要将数据类型(如Pydantic模型)转换为与JSON兼容的数据类型(如dict、list等)。比如,如果您需要将其存储在数据库中。对于这种要求, FastAPI提供了jsonable_encoder()函数。使用jsonable_encoderjsonable_encoder在实际应用场景中,可能需要将数据类型(如:Py......
  • FastAPI学习-16.响应状态码 status_code
    前言与指定响应模型的方式相同,你也可以在以下任意的_路径操作_中使用 status_code 参数来声明用于响应的HTTP状态码:@app.get()@app.post()@app.put()@app.delete()响应状态码fromfastapiimportFastAPIapp=FastAPI()@app.post("/items/",status_code=201)......
  • FastAPI学习-17.其它响应html,文件,视频或其它
    前言通过我们返回JSON类型的接口会比较多,除了返回JSON格式,还可以响应其它格式的内容JSONResponseContent-Type 会被设置成 application/jsonHTMLResponseContent-Type 会被设置成 text/htmlPlainTextResponse Content-Type 会被设置成text/plainORJSONResp......
  • FastAPI学习-18.Response 返回 XML 格式
    前言假设你想要返回一个 XML响应。你可以把你的XML内容放到一个字符串中,放到一个 Response 中,然后返回。Response自定义返回可以把XML内容放到一个字符串中,放到一个 Response 中,设置media_type="application/xml"fromfastapiimportFastAPI,Responseapp=Fa......
  • FastAPI学习-19.response 参数-修改状态码
    前言假设你想默认返回一个HTTP状态码为“OK”200。但如果数据不存在,你想创建它,并返回一个HTTP状态码为“CREATED”201。但你仍然希望能够使用response_model过滤和转换你返回的数据。对于这些情况,你可以使用一个response`参数。使用 response 参数status_code设置默认状......
  • FastAPI学习-21.response 参数-设置响应Cookies
    前言可以在 路径函数 中定义一个类型为 Response的参数,这样你就可以在这个临时响应对象中设置cookie了。response参数设置cookiesfromfastapiimportFastAPI,Responseapp=FastAPI()@app.post("/cookie-and-object/")defcreate_cookie(response:Response):......
  • FastAPI学习-20.response 参数-设置响应头部
    前言你可以在你的_路径操作函数_中声明一个Response类型的参数。设置响应头部你可以在这个_临时_响应对象中设置头部fromfastapiimportFastAPI,Responseapp=FastAPI()@app.get("/headers-and-object/")defget_headers(response:Response):response.headers......
  • 如何从 javascript 中的 Web api 将 json 对象传递到项目的其余部分
    在将从WebAPI获取的JSON数据传递到项目的其他部分之前,您需要确保在完成fetch请求并获得响应后再进行处理。因为fetch是一个异步操作,需要等待服务器响应的完成才能获取到数据。在您的代码示例中,您可以将json数据传递给其他函数或组件进行后续处理。以下是一种可能的处理方式:fetch(B......