JAVA——Stream流

1.Stream流的作用(流水线)

结合了Lambda表达式,简化集合、数组的操作

2.Stream流的使用步骤

①先得到一条Stream流(流水线),并将数据放上去;

②利用Stream流中的API进行各种操作;

eg:过滤    转换   【中间方法】:方法调用完毕后还可以调用其他方法;(使用次数较多)

     统计    打印   【终结方法】:方法调用完毕后不可以再调用其他方法(一般在最后使用)

③使用终结方法对流水线上的数据进行操作;

3.怎样执行2.①?

获取方式 方法名 说明
单列集合 default Stream stream() Collection中的默认方法
双列集合 需先通过KeySet()orentrySet()转化成单列集合 ...
数组 public static Streamstream(T[]array) Array工具类中的静态方法
一堆零散数据 public static Streamof(T...values) Stream接口中的静态方法(数据类型尽量一致)

代码演示:(单列集合)

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

public class Listof {
    public static void main(String[] args) {
        ArrayList list=new ArrayList<>();//创建单列集合
        Collections.addAll(list,"张三","李四","王五","赵六","思思","张小三","张小思");//批量添加
        //Stream stream=list.stream();//单列集合获取Stream流
        //过滤出单列集合中名字以”张“开头且长度为三的名称并进行打印
        list.stream().filter(name->name.startsWith("张")).filter(name->name.length()==3).
                forEach(name->System.out.println(name));
        
        System.out.println("*********************************************");
        //获取单列集合中名字是两个字的人名并进行打印
      list.stream().filter(name->name.length()==2).forEach(name->System.out.println(name));
    }
}

双列集合:

import java.util.*;

public class Listof {
    public static void main(String[] args) {
        //双列集合
        HashMap hm=new HashMap<>();
        hm.put(1,"妲己");
        hm.put(2,"小乔");
        hm.put(3,"安其拉");
        hm.put(4,"王昭君");
        hm.put(5,"甄姬");
        Set integers = hm.keySet();
        integers.stream().forEach(Key-> System.out.println(Key));
        System.out.println("***********************************");
        Set> entries = hm.entrySet();
        entries.stream().filter(name->name.getValue().length()==3).forEach(name-> System.out.println(name));
    }
}

数组,零散数据:

package Deom130;

import java.util.Arrays;
import java.util.stream.Stream;

public class Listof {
    public static void main(String[] args) {
        //数组
        int []array1={1,2,3,4,5};
        String []array2={"a","b","c","d","e"};
        Arrays.stream(array1).forEach(s-> System.out.println(s));
        System.out.println("****************************");
        Arrays.stream(array2).forEach(s-> System.out.println(s));
        System.out.println("****************************");
        //零散数据
        Stream.of(1,2,3,4,5).forEach(s-> System.out.println(s));
        System.out.println("****************************");
        Stream.of("a","b","c","d","e").forEach(s-> System.out.println(s));
    }
}

4.Stream流的中间方法(改变的只是流里面的数据,对原本集合中的数据不会有影响)

名称 说明
Streamfilter(Predicatepredicate 过滤
Streamlimit(long maxSize)

获取前几个元素

limit(3)就是获取前三个元素

Streamskip(long n) 跳过前几个元素
Streamdistinct() 去掉重复元素
staticStreamconcat(Stream a,Stream b) 合并两个流为一个流(两个流上的数据类型尽量保持一致)
Streammap(Function mapper) 转换流中的数据类型

5.Stream流的终结方法

名称 说明
void forEach(Consumer action) 遍历
long count() 统计
toArray() 收集流中的数据放到数组中
collect(Collector) 收集流中的数据放到集合中

6.案例分析

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

public class Listof {
    public static void main(String[] args) {
        //定义一个集合,存储数据,过滤奇数。留下偶数,并存储到集合中
        ArrayList list1=new ArrayList<>();
        Collections.addAll(list1,1,2,3,4,5,6,7,8,9,10);
        List collect = list1.stream().filter(s -> s % 2 == 0).collect(Collectors.toList());
        System.out.println(collect);

        System.out.println("***********************************");
        ArrayList list2=new ArrayList<>();
        Collections.addAll(list2,"张三,23","李四,24","王五,25");
        Map collect1 = list2.stream().filter(s -> Integer.parseInt(s.split(",")[1]) > 24).
                collect(Collectors.toMap(s -> s.split(",")[0], s -> s.split(",")[1]));
        System.out.println(collect1);

      
    }
}

需求:

有两个集合,分别存储六个演员年龄和姓名,现需男演员只要名字为3个字的前两个人,女演员只要姓杨的并且不要第一个,再将得到的两个集合合并为一个集合并且封装成以一个Actor对象,最后将数据存到集合list中;

实现代码:

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

public class Listof {
    public static void main(String[] args) {
      
        ArrayList list1=new ArrayList<>();
        Collections.addAll(list1,"蔡坤坤,24","比个耶,23","刘不甜,22","伍仟,24","谷嘉,30","肖梁梁,27");
        ArrayList list2=new ArrayList<>();
        Collections.addAll(list2,"赵小影,35","杨颖,36","高圆圆,43","张天天,31","刘诗,35","杨小幂,33");
        Stream boylimit = list1.stream().filter(s -> s.split(",")[0].length()==3).limit(2);
        Stream girlskip = list2.stream().filter(s -> s.split(",")[0].startsWith("杨")).skip(1);
        List collect = Stream.concat(boylimit, girlskip).
                map(s -> new Actor(s.split(",")[0], Integer.parseInt(s.split(",")[1]))).
                collect(Collectors.toList());
        System.out.println(collect);


    }
}

你可能感兴趣的:(java,python,开发语言)