Stream流使用的详细介绍

Stream流式编程

Java 8引入了全新的Stream API。这里的Stream和I/O流不同。它提供一种对 Java 集合运算和表达的流式编程方式,大大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
少废话,咱们先来体验一把

//打印输出集合中,姓张并且者长度为3的元素
public class StreamDemo1 {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        list.add("张三丰");
        list.add("张无忌");
        list.add("大黑牛");
        list.add("牛蛋蛋");
        list.add("李敏");
        //打印输出集合中,姓张,或者长度为3的元素
        list.stream()
                .filter(s -> s.startsWith("张"))
                .filter(s -> s.length()==3)
                .forEach(s -> System.out.println(s));
    }
}

Stream API的操作分为三个步骤,获取流 —> 转换流操作—> 最终操作
在这里插入图片描述

获取流的方式

public class StreamDemo2 {
    public static void main(String[] args) {
        //单列集合获取流
        List<String> list=new ArrayList<>();
        Stream<String> stream1 = list.stream();

        Set<String> set=new HashSet<>();
        Stream<String> stream2 = set.stream();

        //双列集合获取流
        Map<String,String> map=new HashMap<>();
        //获取【键】的流
        Stream<String> stream3 = map.keySet().stream();
        //获取【值】的流
        Stream<String> stream4 = map.values().stream();
        //获取【键值对】的流
        Stream<Map.Entry<String, String>> stream5 = map.entrySet().stream();

        //数组获取流皮皮
        String[] array={"毛毛","皮皮","虾虾"};
        Stream<String> stream6 = Stream.of(array);
    }
}

forEach方法

Stream 提供了新的方法 ‘forEach’ 来迭代流中的每个数据

public class ForecahDemo {
    public static void main(String[] args) {
        Stream<String> stream=Stream.of("张无忌","张三丰","周芷若");
        stream.forEach(s -> System.out.println(s));
    }
}

fliter方法

filter方法用于通过设置的条件过滤出元素

public class FilterDemo {
    public static void main(String[] args) {
        Stream<String> stream=Stream.of("张无忌","张三丰","周芷若");
        //过滤以"张"开头的元素
        stream.filter(s -> s.startsWith("张"))
                //过滤长度为3的元素
                .filter(s -> s.length()==3)
                //遍历最终结果
                .forEach(System.out::println);

    }
}

count方法

Stream流提供 count 方法来统计其中的元素个数

public class CountDemo {
    public static void main(String[] args) {
        Stream<Integer> stream = Stream.of(1, 4, 5, 6, 7, 8, 9, 3, 4, 5, 6, 78);
        //先过滤,再求个数
        long count = stream.filter(integer -> integer % 2 == 0).count();
        System.out.println(count);
    }
}

limit方法

limit 方法可以对流进行截取,只取用前n个

public class LimitDemo {
    public static void main(String[] args) {
        Stream<Integer> stream = Stream.of(1, 4, 5, 6, 7, 8, 9, 3, 4, 5, 6, 78);

        //过滤获取偶数元素
        stream.filter(integer -> integer % 2 == 0)
                //截取前2个
                .limit(2)
                //遍历输出
                .forEach(integer -> System.out.println(integer));

    }
}

skip方法

可以使用 skip方法 跳过指定个数获的元素,截取一个新流

public class SkipDemo {
    public static void main(String[] args) {
Stream<String> original = Stream.of("张无忌", "张三丰", "周芷若");
        Stream<String> result = original.skip(2);
        System.out.println(result.count()); 
    }
}

map方法

可以使用 map方法将流中的元素映射到另一个流中

public class MapDemo {
    public static void main(String[] args) {
        Stream<String> original = Stream.of("10", "12", "18");
        Stream<Integer> result = original.map(Integer::parseInt);
    }
}

concat方法

concat可以把两个流组合成一个流

public class ConcatDemo{
    pblic static void main(String[] args){
        Stream<String> streamA = Stream.of("张无忌");
        Stream<String> streamB = Stream.of("张翠山");
        Stream<String> result = Stream.concat(streamA, streamB);
    }
}

sorted方法

sorted方法用于对流进行排序

Stream<Integer> stream = Stream.of(5, 23, 4, 5, 6, 7);
stream.sorted();

//stream.sorted((o1, o2) -> o2-o1).forEach(
//    integer -> System.out.println(integer));

collect收集到集合

ArrayList<String> list=new ArrayList<>();
list.add("张三丰");
list.add("张无忌");
list.add("大黑牛");
list.add("牛蛋蛋");
list.add("李敏");
//打印输出集合中,姓张,或者长度为3的元素
List<String> res1 = list.stream()
        .filter(s -> s.startsWith("张"))
        .collect(Collectors.toList());

toArray收集到数组

ArrayList<String> list=new ArrayList<>();
list.add("张三丰");
list.add("张无忌");
list.add("大黑牛");
list.add("牛蛋蛋");
list.add("李敏");
//打印输出集合中,姓张,或者长度为3的元素
String[] array = list.stream()
        .filter(s -> s.startsWith("张"))
        .toArray(value->new String[value]);
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值