文档章节

java8新特性——stream笔记

刘一草
 刘一草
发布于 2019/12/06 16:08
字数 572
阅读 58
收藏 2

stream对象

  1. Stream<T>

  2. IntStream

  3. LongStream

  4. DoubleStream

创建

常用的三种方式:

  • 使用list对象:

    • list.stream() − 为集合创建串行流。
    • list.parallelStream() − 为集合创建并行流。
  • Arrays: Arrays.stream( T[] array) − 为数组创建流(可以创建IntStream,LongStream,DoubleStrem)。

  • Stream: Stream.of(T... values) − 为一组同类型的数据创建流。

demo:

 /**
     * 集合接口有两个方法来生成流:
     * 按照流的类型可分为串行流和并行流
     * stream() − 为集合创建串行流。
     * parallelStream() − 为集合创建并行流。
     */
    private static Stream<String> createStreamFromCollection() {
        List<String> list = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
        return list.stream();
    }
    /**
     *  使用Stream.of()创建流
     * @return
     */
    private static Stream<String> createStreamFromValues() {
        return Stream.of("hello", "alex", "wangwenjun", "world", "stream");
    }
    /**
     * 使用Arrays.stream()创建流
     * 可以生成IntStream,LongStream,DoubleStream
     * @return
     */
    private static Stream<String> createStreamFromArrays() {
        String[] strings = {"hello", "alex", "wangwenjun", "world", "stream"};
        return Arrays.stream(strings);
    }

操作

filter : 过滤, 过滤掉不符合条件的数据。

map :转换流类型, 返回一个流,该流包含将给定函数应用于该流元素的结果。

​ 比如一个Stream<Map> 类型的流组装后成为Stream<String>的流

limit : 分页。

collect : 将流收集成一个数组。

  List<Dish> menu = Arrays.asList(
                new Dish("pork", false, 800, "肉类"),
                new Dish("beef", false, 700, "肉类"),
                new Dish("chicken", false, 400, "肉类"),
                new Dish("french fries", true, 530, "鱼肉类"),
                new Dish("rice", true, 350, "鱼肉类"),
                new Dish("season fruit", true, 120, "鱼肉类"),
                new Dish("pizza", true, 550, "鱼肉类"),
                new Dish("prawns", false, 300, "其他"),
                new Dish("salmon", false, 450, "其他"));


        //创建菜单流
        List<Map<String,Integer>> result = menu.stream().filter(d -> {
            // 过滤出卡路里大于300的值
            System.out.println("filtering->" + d.getName());
            return d.getCalories() > 300;
        })
                .map(d -> {
                    Map<String, Integer> map = new HashMap<>();
                    map.put(d.getName(),d.getCalories());
                    return map;
                })
                .limit(3)
                .collect(toList());

        System.out.println(result);

其他操作

  List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 6, 7, 7, 1);
        List<Integer> result = list.stream().filter(i -> i % 2 == 0).collect(toList());
        System.out.println("i -> i % 2 的值  :  "+result);
        result = list.stream().distinct().collect(toList());
        System.out.println("去重   :   "+result);
        result = list.stream().skip(2).collect(toList());//跳过前两个数
        System.out.println("跳过   : "+result);
        result = list.stream().limit(4).collect(toList());//取前4个值
        System.out.println("分页   : "+result);
        System.out.println("循环方式一  : ");
        list.forEach(i -> System.out.println(i));
        System.out.println("循环方式二  : ");
        list.forEach((Integer i) -> System.out.println(i));
        System.out.println("循环方式三  : ");
        list.forEach(System.out::println);

        for (int i : list) {
            System.out.println(i);
        }

**** 码字不易如果对你有帮助请给个关注****

**** 爱技术爱生活 QQ群: 894109590****

© 著作权归作者所有

刘一草
粉丝 2
博文 43
码字总数 37087
作品 0
东城
私信 提问
【java8】java新特性(一)——全局观

一、前言 年前的时候 ,我一个师姐出去工作,被鄙视了。说写的代码太垃圾。当时我也没有在意,回头想想自己,本以为自己写的代码天衣无缝,无可挑剔。但是自从自己遇到了Java8 后,我的世界观...

kisscatforever
2018/03/15
0
0
Java8-初识Lambda

廉颇老矣,尚能饭否 Java,这位已经20多岁的编程语言,称得上是编程语言界的老大哥了。他曾经攻城略地,碾压各路编程语言小弟,风光无限,不可一世。现在,也是家大业大,江湖地位,很难撼动...

Jackie_Zheng
2017/09/17
0
0
java8 -函数式编程之Stream

在 java8 -函数式编程之Lambda表达式、 java8 -函数式编程之四个基本接口 、java8 -函数式编程之Optional 三篇文章中,我们已经对函数式编程有了充分的了解,接下来,我们将会运用之前学到的...

细肉云吞
2018/12/24
821
1
巧用Java8中的Stream,让集合操作飞起来!

  点击上方“java进阶架构师”,选择右上角“置顶公众号”   20大进阶架构专题每日送达      作者:坚持就是胜利   juejin.im/post/5d5e2616f265da03b638b28a   简介   java8...

java进阶架构师
01/15
0
0
博为峰Java技术题 ——JavaSE Java 8 新特性

博为峰小博老师: Java 8(又称为jdk1.8)是Java语言开发的一个主要版本 Oracle公司于2014年3月18日发布Java 8它支持函数式编程,新的 JavaScript引擎,新的日期API,新的Stream API等。 [新特性...

博为峰教研组
2016/12/05
83
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 宇宙银河乱弹英雄传 —— @FalconChen

1Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @巴拉迪维 :Axxis的单曲《Only God Knows》 最近只听摇滚,挖了好多以前没听过的歌,蛮好。#今日歌曲推荐# 《Only God Knows》- Axxis 手机...

小小编辑
今天
137
1
Safari Date() 函数对日期时间字符串(yyyy-MM-dd HH:mm:ss) 提示NaN的问题

今天发现一个奇怪的问题,在iPhone使用 safari 选择定时发布文章到OSC,选择时间后提示不是合法的时间,判断时间的代码如下: var d = new Date('2020-01-23 23:15'); if (isNaN(d)) {...

FalconChen
昨天
124
0
ActiveMQ学习之通讯协议

一、支持的通讯协议 ActiveMQ支持的client-broker通讯协议有:TCP、NIO、UDP、SSL、HTTP(S)、VM 其中配置Transport Connector的文件在ActiveMQ安装目录的conf/activemq.xml中的<TransportCon...

冥焱
昨天
91
0
应急广播户户通平台

一、平台概述 应急广播户户通平台为软硬一体化广播服务解决方案。实现了应急广播、视音频及图片文字信息、调频及数字广播FM、天气预报信息接收功能,以及视音频播放、智能机器人、电子日历等...

neocean
昨天
133
0
如何为Apache 2.2启用mod_rewrite

我已经在我的Vista机器上安装了新的Apache 2.2,一切正常,除了mod重写。 我没有注释 LoadModule rewrite_module modules/mod_rewrite.s 但是我的重写规则都没有,即使是简单的重写规则 Re...

javail
昨天
53
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部