文档章节

构建Stream类

沙漠里的骆驼
 沙漠里的骆驼
发布于 2017/05/03 22:53
字数 442
阅读 3
收藏 0

#构建Stream类

Java 8新特性:全新的Stream API

流的概念。与linux下的| 的操作类似。将一个一个结果串起来。在很多时候,都可以与 集合类做类比。

与集合类不同的地方:

  1. 集合类是将所有元素都放在内存中。而stream元素在访问时才计算。因此,集合类无法 表示无穷,比如所有的自然数。而stream可以。
  2. 集合类的所有调度操作是人工完成,比如使用for遍历。而stream是封装在内部的。因此 stream可以方便的支持并发。

生成stream类的几种方法

  1. Stream.generate
  2. 使用iterable接口生成。
public class NaturalStream {
    class NaturalSupplier implements Supplier<Long> {//无限流
        long v = 0;//long会溢出。简单示例

        @Override
        public Long get() {
            return ++v;
        }
    }

    /**
     * 可以是无限流,也可以是有限流。由hasNext()控制
     */
    class NaturalIterable implements Iterable<Long> {

        @Override
        public Iterator<Long> iterator() {
            return iterator;
        }

        Iterator<Long> iterator = new Iterator<Long>() {
            long v = 0;

            @Override
            public boolean hasNext() {
                return true;
            }

            @Override
            public Long next() {
                return ++v;
            }
        };
    }


    public Stream<Long> naturalStream() {
        return Stream.generate(this.new NaturalSupplier());
    }

    public Stream<Long> IterableStream() {
        NaturalIterable iterable = new NaturalIterable();
        return StreamSupport.stream(iterable.spliterator(), false);
    }

    public Stream<Long> IteratorStream() {
        Iterator<Long> iterator = new NaturalIterable().iterator;
        Iterable<Long> iterable = () -> iterator;
        return StreamSupport.stream(iterable.spliterator(), false);
    }

}

对于文件的读取,也可以使用流操作。简化每次文件读写的繁重工作。

public class FileReaderStream implements Iterable<String> {
    private final BufferedReader reader;
    private String str = null;

    public FileReaderStream(File file) throws FileNotFoundException {
        this.reader = new BufferedReader(new FileReader(file));
    }

    public static Stream<String> createStream(File file) throws FileNotFoundException {
        FileReaderStream iterator = new FileReaderStream(file);
        return StreamSupport.stream(iterator.spliterator(), false);
    }

    @Override
    public Iterator<String> iterator() {
        return iterator;
    }

    private Iterator<String> iterator = new Iterator<String>() {
        @Override
        public boolean hasNext() {
            try {
                str = reader.readLine();
                if (str == null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            return str != null;
        }

        @Override
        public String next() {
            return str;
        }
    };
}

© 著作权归作者所有

沙漠里的骆驼
粉丝 0
博文 1
码字总数 442
作品 0
杭州
私信 提问
Java8 - 使用Stream API

Java8 - 使用Stream API Stream 是什么? Stream represents a sequence of objects from a source, which supports aggregate operations(多种操作). Following are the characteristics......

秋风醉了
2018/09/12
0
0
Flutter 实践 MVVM

在这篇文章中: Flutter 实践 MVVM Flutter 实践 MVVM 在做Android或iOS开发时,经常会了解到MVC,MVP和MVVM。MVVM在移动端一度被非常推崇,虽然也有不少反对的声音,不过MVVM确实是不错的设...

DSoon
2018/12/20
0
0
【转载】ASP.NET以Post方式抓取远程网页内容类似爬虫功能

使用HttpWebRequest等Http相关类,可以在应用程序中或者网站中模拟浏览器发送Post请求,在请求带入相应的Post参数值,而后请求回远程网页信息。实现这一功能也很简单,主要是依靠HttpWebRequ...

江湖逍遥
03/13
0
0
Effective_Java_Index

基于《Effective Java 第三版》的读书笔记 创建和销毁对象 第1条:用静态工厂方法代替构造器 第2条:遇到多个构造参数时要考虑用构建器 第3条:用私有构造器或者枚举类型强化Singleton属性 ...

添仔哥哥
2017/08/26
0
0
Spring Cloud构建微服务架构:消息驱动的微服务(入门)【Dalston版】

之前在写Spring Boot基础教程的时候写过一篇《Spring Boot中使用RabbitMQ》。在该文中,我们通过简单的配置和注解就能实现向RabbitMQ中生产和消费消息。实际上我们使用的对RabbitMQ的starter...

翟永超
2017/12/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据库

数据库架构 数据库架构可以分为存储文件系统和程序实例两大块,而程序实例根据不同的功能又可以分为如下小模块。 1550644570798 索引模块 常见的问题有: 为什么要使用索引 什么样的信息能成...

一只小青蛙
今天
5
0
PHP常用经典算法实现

<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){ if ( $low <= $high){ $mid = int......

半缘修道半缘君丶
昨天
5
0
GIL 已经被杀死了么?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/8KvQemz0SWq2hw-2aBPv2Q 花下猫语: Python 中最广为人诟病的一点,大概就是它的 GIL 了。...

豌豆花下猫
昨天
5
0
git commit message form

commit message一般包括3部分:Header、Body、Footer。 <type>(<scope>):<subject>blank line<body>blank line<footer> header是必需的,body、footer可以省略。 header中type、subject......

ninjaFrog
昨天
5
0
聊聊Elasticsearch的CircuitBreakerService

序 本文主要研究一下Elasticsearch的CircuitBreakerService CircuitBreakerService elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/indices/breaker/CircuitBreakerService.ja......

go4it
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部