Stream

4.Stream

4.1介绍
流(Stream)是数据管道,用于操作数据源(集合、数组等)说生成的元素序列,集合说的是数据,而流指的是计算
特点:
1.不存储数据
2.不改变源对象,每次操作返回一个持有结果的请Stream
3.延迟执行,需要结果的时候才执行
4.2 使用
1.创建数据源,获取一个流
2.中间操作,对数据进行处理
3.终止操作,产生结果
4.3 举个栗子
//1.通过Collection 系列集合提供的stream() 或 parallelStream()
List<String> list = new ArrayList<>();
Stream<String> stream1 = list.stream();
Stream<String> stream2 = list.parallelStream();
//2.通过Arrays 中的静态方法stream() 获取数组流
Integer [] integers = new Integer[10];
Stream<Integer> stream3 = Arrays.stream(integers);
//3.通过Stream 类中的静态方法of()
Stream<String> stream4 = Stream.of("a", "b", "c");

//4. 创建无限流
Stream<Integer> stream5 = Stream.iterate(0, (x) -> x + 2);
4.4 中间操作

多个中间操作可以连接成一个类似于流水线的场景,如果不碰到终止操作,中间操作不会进行任何处理,而在终止操作时一次性全部处理,简称 “惰性求值”

4.4.1 筛选和切片
filter-----》接收 lambda,从流中筛出某些元素
limit(n)------》截断流,使其不超过给定数量
skip(n)-------》跳过元素,返回一个扔掉了前n个元素的流,若流中元素不足n个,则返回一个空流
distinct------》通过筛选流中的元素的hashcode和equals去除重复元素
 @Test
    public void test2(){
        List<Integer> list =  Arrays.asList(10 ,20, 20 , 50 , 60 , 70 , 80);
        System.out.println("------filter----------");
        list.stream().filter( x-> x>10).forEach(System.out::println);
        System.out.println("------limit-----------");
        list.stream().limit(2).forEach(System.out::println);
        System.out.println("------skip------------");
        list.stream().skip(2).forEach(System.out::println);
        System.out.println("------distinct------------");
        list.stream().distinct().forEach(System.out::println);
    }
4.4.2 映射
map----》接收Lambda,将元素转换成其他形式或提取信息。接收一个函数作为参数,该函数会应用到每个元素上,
并将其映射成一个新的元素
flatMap---》接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流
 @Test
    public void test3(){
        List<String> list =  Arrays.asList("aaa" ,"bbb" ,"ccc" ,"d" ,"e");
        Stream<String> stringStream = list.stream().map(str -> str.toUpperCase());
        list.stream().flatMap(StreamTest::getList).forEach(System.out::print);
    }

    public static Stream<Character> getList(String str){
        List<Character> list = new ArrayList<>();
        for (Character character : str.toCharArray()) {
            list.add(character);
        }
    return list.stream();
    }
4.4.3排序
排序
sorted()--自然排序
sorted(Comparator com) --定制排序
@Test
    public void test4(){
        List<Integer> list =  Arrays.asList(10 ,20, 20 , 50 , 60 , 70 , 80);
        list.stream().sorted().forEach(x-> System.out.print(x + ","));
        list.stream().sorted((o1 ,o2)-> -Integer.compare(o1 , o2)).forEach(x-> System.out.print(x + ","));
    }
4.5 终止操作
4.5.1 查找与匹配
allMatch--检查是否匹配所有元素
angMatch--检查是否至少匹配一个元素
noneMatch--检测是否没有匹配所有元素
findFirst--返回第一个元素
findAny--返回当前流中的任意元素
count--返回总数
max--返回流中最大值
min--返回流总最小值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值