Stream流转换成集合和数组

2023-01-02 00:00:00 数组 流转 换成

Stream流是自jdk1.8起才有的一个抽象类,属于管道流,即为流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
其中有一些和集合,数组相关的方法。
下面来示范Stream流的静态方法of和stream()(创建流),skip(),concat(),map(),limit(),filter()方法(转换流)(这些可称为延迟方法)count(),foreach方法(这二者可称为终结方法)
Stream流有延迟方法和终结方法(例如foreach,count方法等为终结方法),流调用完延迟方法可以继续用流调用方法,而终结方法反之

import java.util.*;
import java.util.stream.Stream;
//stream流属于管道流,且只能使用一次,使用完后该流回自动关闭,不能再调用方法


public class steam { 

    public static void main(String[] args) { 
        ArrayList<String> l = new ArrayList<>();
        l.add("流星");
        l.add("流眼泪");
        l.add("刘型");
        l.add("留下");
        Stream<String> ed = l.stream();
        long count = ed.count();//stream流的count方法相当于集合size方法计算元素的个数
        System.out.println(count);
        l.stream().filter((name)->name.startsWith("流"))//Stream的filter方法是留下指定条件的数据,作用为过滤
   .filter((name)->name.length()==2||name.length()==3)      //这里用了lambda表达式进行了简化代码(下同),而filter方法传的是predicate一种常见的函数式接口,其返回一个Boolean值
            .forEach(name-> System.out.println(name));//foreach方法不同于for循环中的for-each,这里用于遍历流中的数据
            这里的foreach方法传递Consumer一个函数式接口(一次性消费数据)

该段代码可用于筛选集合或数组具有特定条件的元素

 **concat方法**

```c

  ArrayList<String> l12 = new ArrayList<>();
        l12.add("流星");
        l12.add("流眼泪");
        l12.add("刘型");
        l12.add("留下");
        Stream<String> ed1 = l12.stream();
        ArrayList<String> jss = new ArrayList<>();
        jss.add("1");
        jss.add("2");
        jss.add("3");
        jss.add("5");
        Stream<String> dw = jss.stream();
        Stream.concat(dw,ed1).forEach(se-> System.out.println(se));//concat方法用于合并流

map,skip方法

ArrayList<String> j = new ArrayList<>();
        j.add("1");
        j.add("2");
        j.add("3");
        j.add("5");
        Stream<String> s = j.stream();
        Stream<Integer> integerStream = s.map((String f) -> { //map方法里面传的参数是Function函数式接口,用于改变参数的类型,这里将String类型参数改为Integer类型
            return Integer.parseInt(f);
        });
          Stream<Integer> integerStream1 = integerStream.skip(2);//skip方法为跳过前n个元素截取后面的元素变成一个新流
        integerStream1 .forEach(integer -> System.out.println(integer));
        
 
     Stream<String> l1 = l.stream();//所有Collection集合(即所有单例集合不包括map集合)都可以通过stream方法将集合转换成Stream流
        Map<String, String> s1 = new HashMap<>();
        Set<String> s2 = s1.keySet();//map集合的键可通过keyset方法变成set集合
        Stream<String> s3 = s2.stream();
        Collection<String> s4 = s1.values();//map集合的值可通过values方法变成Collection集合
        Stream<String> s5 = s4.stream();
        Set<Map.Entry<String, String>> s6 = s1.entrySet();//map集合可通过entryset方法将键值对转换成set集合
        Stream<Map.Entry<String, String>> s7 = s6.stream();
        String a[]={ "1","ssds","fsf"};//对于其他类型的数组可通过调用Stream的静态方法of里面传各种数组最终转换成Stream流
        Stream<String> a1 = Stream.of(a);
        Integer b[]={ 1,3,5,6,76};
        Stream<Integer> b1 = Stream.of(b);

    }
}
该段代码为常见集合和数组转换成Stream流的常用方法
    原文作者:少季池鱼
    原文地址: https://blog.csdn.net/weixin_45876091/article/details/112505705
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章