Java中Stream流

Stream流作用

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

Stream思想与使用步骤

a.先得到集合或者数组的Stream流(就是一根传送带)。
b.把元素放上去。
c.然后就用这个Stream流简化的API来方便的操作元素。

集合与数组获取Stream流方式

示例代码

package stream.exception.log.d2_stream;

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

public class StreamDemo1 {
    public static void main(String[] args) {
        //Collection集合获取流
        Collection<String> list=new ArrayList<>();
        Stream<String> s=list.stream();


        //Map集合获取流
        Map<String, Integer> maps=new HashMap<>();
        //键流
        Stream<String> keyStream=maps.keySet().stream();
        //值流
        Stream<Integer> valueStream=maps.values().stream();
        //键值对流
        Stream<Map.Entry<String, Integer>> keyAndValueStream=maps.entrySet().stream();

        //数组获取流
        String[] names={"张三","李四","王五","赵六"};
        Stream<String> nameStream=Arrays.stream(names);//方法一

        Stream<String> nameStream2= Stream.of(names);//方法二
    }
}

Stream流常用API

示例代码

StreamDemo3类(实现类)

package stream.exception.log.d2_stream;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Stream;

/**
    Stream流常用API
 */
public class StreamDemo2 {
    public static void main(String[] args) {
        List<String> lists=new ArrayList<>();

        lists.add("张三");
        lists.add("李四");
        lists.add("王五");
        lists.add("张六");
        lists.add("张七");
        lists.add("周八");

        //过滤元素,做数据判断。  filter方法  源码:Stream<T> filter(Predicate<? super T> predicate);
        lists.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("张");//判断名字是否有张,并返回true
            }
        });

        //简化
        lists.stream().filter( s-> s.startsWith("张")).forEach(s -> System.out.println(s)); //判断名字是否有张,并返回true

        //count统计个数
        long size=lists.stream().filter(s->s.length()==2).count();
        System.out.println(size);

        //获取前两个元素,limit方法
        lists.stream().filter(s->s.startsWith("张")).limit(2).forEach(System.out::println);

        //跳过前几个元素,skip方法
        lists.stream().filter(s->s.startsWith("张")).skip(2).forEach(System.out::println);

        //map加工方法:第一个参数原材料->第二个参数时加工后的结果

        //给集合元素都加上一个:翻斗幼儿园
        lists.stream().map(s -> "翻斗幼儿园:" +s).forEach(System.out::println);


        //需求:将所有名称,都加工成一个学生类对象
        lists.stream().map(s -> new Student(s)).forEach(System.out::println);

        //合并流,concat方法
        Stream<String> s1=lists.stream().filter(s->s.startsWith("张"));
        Stream<String> s2=Stream.of("Java1","Java2");
        Stream<String> s3=Stream.concat(s1,s2);
        s3.forEach(System.out::println);

    }
}

 Stuent类(学生类)

package stream.exception.log.d2_stream;

public class Student {
    private String name;

    public Student(){};

    public Student(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                '}';
    }
}

收集Stream流到集合或数组中

示例代码

package stream.exception.log.d2_stream;

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

/**
    收集Stream流到集合或数组中
 */
public class StreamDemo3 {
    public static void main(String[] args) {
        List<String> lists=new ArrayList<>();
        lists.add("张三");
        lists.add("李四");
        lists.add("王五");
        lists.add("张六");
        lists.add("张七");
        lists.add("周八");


        Stream<String> s1=lists.stream().filter(s->s.startsWith("张"));

        //将Stream流收集到List集合中
//        List<String> zhangList = s1.collect(Collectors.toList());
//        System.out.println(zhangList);

        //注意:流只能使用一次

        //将Stream流收集到Set集合中
//        Set<String> zhangSet = s1.collect(Collectors.toSet());
//        System.out.println(zhangSet);

        //将Stream流收集到数组
        Object[] arrs= s1.toArray();
        System.out.println("Arrays数组内容:"+Arrays.toString(arrs));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值