0
点赞
收藏
分享

微信扫一扫

Stream Api

一世独秀 2023-09-17 阅读 26

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

特点:

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

使用:

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

API:

获取Stream流的方法:

Stream Api_java

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);//这里的数据量小 体现不出速度 只是简单说下
  }


}



举报

相关推荐

0 条评论