stream 订阅
Stream泛指流媒体技术。流媒体实际指的是一种新的媒体传送方式,而非一种新的媒体,是指采用流式传输的方式在Internet播放的媒体格式。可指大河,也可指小河或小溪,指小溪时与brook,creek同义。creek侧重其狭长蜿蜒,缓缓流动,且多流入大河或湖泊。brook侧重发源于山泉。creek和stream都比brook大。stream还可引申表示事物连绵不断。stream还可作动词,意为“流动,飘动”。常用作不及物动词,也可用作及物动词。 展开全文
Stream泛指流媒体技术。流媒体实际指的是一种新的媒体传送方式,而非一种新的媒体,是指采用流式传输的方式在Internet播放的媒体格式。可指大河,也可指小河或小溪,指小溪时与brook,creek同义。creek侧重其狭长蜿蜒,缓缓流动,且多流入大河或湖泊。brook侧重发源于山泉。creek和stream都比brook大。stream还可引申表示事物连绵不断。stream还可作动词,意为“流动,飘动”。常用作不及物动词,也可用作及物动词。
信息
外文名
Stream
基本解释
泛指流媒体技术
词    性
动词,名词
中文名
流媒体技术
stream英语单词
基本释义v. [striːm] ( streams; streamed; streaming )vt. & vi. 流; 移动 flow freely; move continuously and smoothly in one directionvi. 飘扬; 招展 float or wave (in the wind)词语要点1.stream的基本意思是“流动”,指受限制的流动,如通过一定的路线或出口。也可指大量不断地流动。引申可指“飘动”。2.stream既可用作及物动词,也可用作不及物动词。用作及物动词时,可接名词或代词作宾语。3.stream接介词with表示“被…覆盖”。词语搭配~+副词stream torrentially 激流涌进stream back 向后飘动stream in 络绎进入~+介词stream behind 在…后面飘动stream down one's cheeks (眼泪)从脸颊流下stream into the auditorium (人群)络绎不绝进入礼堂stream out of the station (人群)涌出车站stream with 被…覆盖辨析pour, flow, run, stream这组词的共同意思是“流”“流动”。其区别是:1.flow, run, stream和pour都可指液体流动; flow还可指气体流动; pour还可指光线、微粒等倾泻。2.时间上:flow一般指源源不断地、长时间地流动; run既可以是源源不断地、长时间地流动,也可以是流动一段时间; stream和pour多指短时间地流动。3.方向上:指液体流动时, flow是水平流动; run和stream既可水平流动,也可垂直流动; pour是垂直流动。4.流速上:从快到慢依次为pour, stream, run, flow。具体说就是flow是平平稳稳地流动; run比较湍急; stream比run更有力; pour则是“倾泻”。5.flow, stream和pour常用于比喻, run很少用于比喻。例如:The river was flowing quietly.河水静静流着。She let her hair down so that it flew darkly over her shoulders.她让乌黑的头发披散下来,飘垂到肩上。  The river runs through hills and fields.河水流经山冈和田野。The water runs out of the pipe into the bucket.水自管内注入水桶中。Tears were streaming down her face.她脸上热泪滚滚而下。The students streamed into the auditorium.学生们络绎不绝地进入礼堂。下面三句话的意思相同:She poured me a cup of tea.She poured a cup of tea for me.She poured me out a cup of tea.她给我倒了一杯茶。词源<古英语stream(流动)基本释义C 小河,溪流 a small river C 流,一股,一串 flow (of liquid, people, things, etc.)S 水流方向,潮流 current or direction of sth flowing or movingC (按能力分的)班级 class or division of a class into which children of the same age and level of ability are placedC 川流不息 a continuous series of people, things, or events, usually moving in a line or in a certain direction常见搭配动词+~cross a stream 涉过一条小溪tap a stream 引流形容词+~clear〔dancing, quiet, running〕 stream 清澈〔奔腾欢跳,平静,流动〕的溪流rapid〔strong〕 stream 湍急〔强劲〕的水流rushing stream 激流名词+~mountain stream 山涧sun streams 太阳光线介词+~in streams 连续不断,川流不息on stream 进行生产,投入生产up the stream 向〔在〕上游~+介词a stream of light 一缕光线a stream of words 滔滔不绝的话the stream of history 历史潮流词语辨析branch,brook,canal,creek,river,stream,torrent这组词的共同意思是“流水的通道”。其区别是:1.除canal指人工开挖的河流或渠道外,其余各词均指自然形成的水道。2.river和torrent均指流量较大的河流,river可泛指(自然形成的)江河;torrent则特指急流、湍流。这两个词还常用于比喻。3.stream可指大河,也可指小河或小溪,指小溪时与brook,creek同义。creek侧重其狭长蜿蜒,缓缓流动,且多流入大河或湖泊。brook侧重发源于山泉。creek和stream都比brook大。stream还可引申表示事物连绵不断。4.branch指江河的支流。同义词n. brook, course, flow, rush, streamlet [1] 
收起全文
精华内容
参与话题
问答
  • Stream

    千次阅读 2016-12-30 14:39:30
    Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 ...

    为什么需要Stream

    Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。

    @FunctionalInterface

    被这个注解标记的inteface可以用lambda表达式替代参数。

    Function<String, String> getAge = (s) -> s;
    Consumer<String> getAge2 = (s) -> {};
    Supplier<String> heh = () -> "a";

    Function和BiFunction对应1个入参和2个入参的
    lambda表达式也是这么对应的1个还是2个参数

    使用::

    java8可以用::产生lambda,不如:
    System.out::println
    String::concat

    ::有上下文这个概念,我理解的就是调用这个方法需不需要一个对象去调用。
    1.对于System.out::println,不需要上下文(可以直接调用,不需要对象去调用这个方法,因为System.out是static的,System.out.printn(a)),且println需要一个参数,那么System.out::println生成的lambda就是1个入参的,即() -> {}.
    2.对于String::concat,需要上下文,且concat方法需要一个参数,那么String::concat生成的lambda机会是2个入参的,即(a, b) -> {},需要的上下文即第一个参数的类型必须为::前面的类型或者子类。如果因为方法能给提供的参数类型和上下文需要的类型不一致也不对,会报Non-static method cannot be referenced from a static context。

    example

    List<String> list = Stream.of("1111", "222", "333", "4")
    .filter(e -> e.length() > 3)
    .peek(System.out::println)
    .map(ss -> ss.toUpperCase())
    .peek(e -> System.out.println("Mapped value: " + e))
    .collect(Collectors.toList());
    Set<String> widgets = new HashSet<>();
    widgets.add("1");
    widgets.add("2");
    widgets.add("3");
    widgets.add("4");
    String s = widgets.stream().collect(Collectors.joining(",", "(", ")"));
    Stream<List<Integer>> inputStream = Stream.of(
    Arrays.asList(1),
    Arrays.asList(2, 3),
    Arrays.asList(4, 5, 6)
    );
    Stream<Integer> outputStream = inputStream.flatMap((childList) -> childList.stream());

    参考

    https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/

    展开全文
  • using System.IO; using System.Text; using System.Threading.Tasks; namespace Core.Util { public static partial class Extention { /// <summary> /// 将流读为字符串 /// 注:默认使用UTF-8编码 ...
    using System.IO;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Core.Util
    {
        public static partial class Extention
        {
            /// <summary>
            /// 将流读为字符串
            /// 注:默认使用UTF-8编码
            /// </summary>
            /// <param name="stream">流</param>
            /// <param name="encoding">指定编码</param>
            /// <returns></returns>
            public static async Task<string> ReadToStringAsync(this Stream stream, Encoding encoding = null)
            {
                if (encoding == null)
                    encoding = Encoding.UTF8;
    
                if (stream.CanSeek)
                {
                    stream.Seek(0, SeekOrigin.Begin);
                }
    
                string resStr = string.Empty;
                resStr = await new StreamReader(stream, encoding).ReadToEndAsync();
    
                if (stream.CanSeek)
                {
                    stream.Seek(0, SeekOrigin.Begin);
                }
    
                return resStr;
            }
        }
    }
    
    展开全文
  • Java集合Stream类filter的使用

    万次阅读 多人点赞 2018-05-11 11:49:42
    之前的Java集合中removeIf的使用一文写了使用removeIf来实现按条件对集合进行过滤。这篇文章使用同样是JDK1.8新加入的Stream中filter方法来实现同样的效果。

    之前的Java集合中removeIf的使用一文写了使用removeIf来实现按条件对集合进行过滤。这篇文章使用同样是JDK1.8新加入的Streamfilter方法来实现同样的效果。并且在实际项目中通常使用filter更多。关于Stream的详细介绍参见Java 8系列之Stream的基本语法详解
    同样的场景:你是公司某个岗位的HR,收到了大量的简历,为了节约时间,现需按照一点规则过滤一下这些简历。比如要经常熬夜加班,所以只招收男性

    //求职者的实体类
    public class Person {
        private String name;//姓名
        private Integer age;//年龄
        private String gender;//性别
    
        ...
        //省略构造方法和getter、setter方法
        ...
    
        //重写toString,方便观看结果
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", gender='" + gender + '\'' +
                    '}';
        }
    }
    

    这里就不展示使用传统Iterator来进行过滤了,有需要做对比的可以参见之前的Java集合中removeIf的使用
    使用Streamfilter进行过滤,只保留男性的操作:

    Collection<Person> collection = new ArrayList();
    collection.add(new Person("张三", 22, "男"));
    collection.add(new Person("李四", 19, "女"));
    collection.add(new Person("王五", 34, "男"));
    collection.add(new Person("赵六", 30, "男"));
    collection.add(new Person("田七", 25, "女"));
    
    Stream<Person> personStream = collection.stream().filter(new Predicate<Person>() {
        @Override
        public boolean test(Person person) {
             return "男".equals(person.getGender());//只保留男性
        }
    });
    
    collection = personStream.collect(Collectors.toList());//将Stream转化为List
    System.out.println(collection.toString());//查看结果
    

    运行结果如下:

    [Person{name=‘张三’, age=22, gender=‘男’}, Person{name=‘王五’, age=34, gender=‘男’}, Person{name=‘赵六’, age=30, gender=‘男’}]
    Process finished with exit code 0

    上面的demo没有使用lambda表达式,下面的demo使用lambda来进一步精简代码:

    Collection<Person> collection = new ArrayList();
    collection.add(new Person("张三", 22, "男"));
    collection.add(new Person("李四", 19, "女"));
    collection.add(new Person("王五", 34, "男"));
    collection.add(new Person("赵六", 30, "男"));
    collection.add(new Person("田七", 25, "女"));
    
    Stream<Person> personStream = collection.stream().filter(
            person -> "男".equals(person.getGender())//只保留男性
    );
    
    collection = personStream.collect(Collectors.toList());//将Stream转化为List
    System.out.println(collection.toString());//查看结果
    

    效果和不用lambda是一样的。

    不过读者在使用filter时不要和removeIf弄混淆了:

    • removeIf中的test方法返回true代表当前元素会被过滤掉
    • filter中的test方法返回true代表当前元素会保留下来
    展开全文
  • Stream和parallelStream

    万次阅读 多人点赞 2019-04-22 15:16:54
    Stream 和 parallelStream 一.什么是StreamStream 是在 Java8 新增的特性,普遍称其为流;它不是数据结构也不存放任何数据,其主要用于集合的逻辑处理。 二.和Iterator的区别 Iterator 做为迭代器,其按照一定的...

    Stream parallelStream

    一.什么是Stream?

    Stream 是在 Java8 新增的特性,普遍称其为流;它不是数据结构也不存放任何数据,其主要用于集合的逻辑处理。

    二.和Iterator的区别

    Iterator 做为迭代器,其按照一定的顺序迭代遍历集合中的每一个元素,并且对每个元素进行指定的操作。而 Stream 在此基础上还可以将这种操作并行化,利用多核处理器的优势快速处理集合(集合的数据会分成多个段,由多个线程处理)。

    Stream 的数据源可以有无限多个。

    三.Stream的使用

    在使用Stream之前,建义先理解接口化编程,Stream将完全依赖于接口化编程方式。接下来我们以“打印集合中的每一个元素”为例,了解一下 Stream 的使用。

    ​ 例3.1

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); 
    numbers.stream().forEach(num->System.out.println(num));
    
    输出:1 2 3 4 5 6 7 8 9
    

    由以上的列子可以看出,Stream 的遍历方式和结果与 Iterator 没什么差别,这是因为Stream的默认遍历是和迭代器相同的,保证以往使用迭代器的地方可以方便的改写为 Stream。

    Stream 的强大之处在于其通过简单的链式编程,使得它可以方便地对遍历处理后的数据进行再处理。我们以“对集合中的数字加1,并转换成字符串”为例进行演示。

    ​ 例3.2

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);`
    
    `List<String> strs = numbers.stream()`
    
    `.map(num->Integer.toString(++num)).collect(Collectors.toList());
    

    其中map()方法遍历处理每一个元素,并且返回一个新的Stream,随后collect方法将操作后的Stream解析为List。

    Stream还提供了非常多的操作,如filter()过滤、skip()偏移等等,想要了解更多可以去翻阅JDK1.8手册或者相关资料。

    四.并行流parallelStream

    parallelStream提供了流的并行处理,它是Stream的另一重要特性,其底层使用Fork/Join框架实现。简单理解就是多线程异步任务的一种实现。

    我们用例3.1中的示例演示一下parallelStream的使用。

    ​ 例4.1

    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); 
    numbers.parallelStream().forEach(num->System.out.println(num));
    
    输出:3 4 2 6 7 9 8 1 5
    

    我们发现,使用parallelStream后,结果并不按照集合原有顺序输出。为了进一步证明该操作是并行的,我们打印出线程信息。

    ​ 例4.2

       List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); 
       numbers.parallelStream() .forEach(num-
       		>System.out.println(Thread.currentThread().getName()+">>"+num)); 
    

    输出:

    main>>6 
    ForkJoinPool.commonPool-worker-2>>8 
    main>>5 ForkJoinPool.commonPool-worker-2>>9 
    ForkJoinPool.commonPool-worker-1>>3 
    ForkJoinPool.commonPool-worker-3>>2 
    ForkJoinPool.commonPool-worker-1>>1 
    ForkJoinPool.commonPool-worker-2>>7 
    main>>4
    

    通过例4.2可以确信parallelStream是利用多线程进行的,这可以很大程度简化我们使用并发操作。

    我们可以通过虚拟机启动参数

    -Djava.util.concurrent.ForkJoinPool.common.parallelism=N

    来设置worker的数量。

    五.并行流的陷阱

    5.1.线程安全

    由于并行流使用多线程,则一切线程安全问题都应该是需要考虑的问题,如:资源竞争、死锁、事务、可见性等等。

    5.2.线程消费

    在虚拟机启动时,我们指定了worker线程的数量,整个程序的生命周期都将使用这些工作线程;这必然存在任务生产和消费的问题,如果某个生产者生产了许多重量级的任务(耗时很长),那么其他任务毫无疑问将会没有工作线程可用;更可怕的事情是这些工作线程正在进行IO阻塞。

    本应利用并行加速处理的业务,因为工作者不够反而会额外增加处理时间,使得系统性能在某一时刻大打折扣。而且这一类问题往往是很难排查的。我们并不知道一个重量级项目中的哪一个框架、哪一个模块在使用并行流。

    接下来我们对这个问题进行演示:

    ​ 例5.1

    定义两个并行流逻辑
    执行两个并行流
    输出:
    并行流竞争输出结果

    通过示例我们会发现,第一个并行流率先获得worker线程的使用权,第二个并行流变为串行;直到第14行,第一个并行流处理完毕,第二个并行流获取worker线程,开始并行处理。

    小结:

    串行流:适合存在线程安全问题、阻塞任务、重量级任务,以及需要使用同一事务的逻辑。

    并行流:适合没有线程安全问题、较单纯的数据处理任务。

    展开全文
  • 对于中间操作和终端操作的定义,请看《JAVA8 stream接口 中间操作和终端操作》,这篇主要讲述的是stream的count,anyMatch,allMatch,noneMatch操作,我们先看下函数的定义 long count(); boolean anyMatch...
  • list去重,根据对象某个属性、某几个属性... List unique = list.stream().distinct().collect(Collectors.toList()); 去除List中重复的对象 // Person 对象 public class Person { private String id; ...
  • stringstream常见用法介绍

    万次阅读 多人点赞 2018-09-10 23:20:54
    本文主要介绍 C++ 中 stringstream 类的常见用法。 1 概述 <sstream> 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作。本文以 stringstream 为主...
  • 对于中间操作和终端操作的定义,请看《JAVA8 stream接口 中间操作和终端操作》,这篇主要讲述的是stream的min,max,findFirst,findAny操作,我们先看下函数的定义 Optional<T> min(Comparator<? super...
  • Java8新特性Stream之list转map及问题解决

    万次阅读 多人点赞 2018-10-11 14:57:44
    List集合转Map,用到的是Stream中Collectors的toMap方法:Collectors.toMap 具体用法实例如下: //声明一个List集合 List&amp;lt;Person&amp;gt; list = new ArrayList(); list.add(new Person(&...
  • Java 8 stream的详细用法

    万次阅读 多人点赞 2019-01-08 23:12:43
    Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以...
  • java8新特性 lambda Stream map(函数式编程)

    万次阅读 多人点赞 2016-08-20 15:04:42
    java8新特性 lambda Stream map(函数式编程) 牛刀小试:使用Java8新特性获取股票数据https://blog.csdn.net/u014646662/article/details/82936131 Java8实战.pdf 下载:...
  • # 将数据流转成图片时报错,内存不足,... System.Drawing.Image imgData = Image.FromStream(stream1);//报错内存不足 imgData.Save(urlData, System.Drawing.Imaging.ImageFormat.Png);//xxx.jpeg为文件名 ```
  • Java8 stream 之groupingBy() 分组排序

    万次阅读 热门讨论 2017-12-29 12:06:37
    List matchsList = new ArrayList();... MatchsListMap = matchsList.stream() .collect(Collectors.groupingBy(Matchs::getMatchDate)); 此时MatchsListMap的排序规则是根据MatchDate降序的(默认),也就是说ma
  • Stream的collect方法传入的是Collector接口 ![图片说明](https://img-ask.csdn.net/upload/201810/19/1539893004_458795.png) 一般博客介绍都是传入的Collectors.toList()这个方法,源码: ![图片说明]...
  • Elecard StreamEye Studio(带注册机)

    千次下载 热门讨论 2015-07-03 16:36:33
    1. Elecard StreamEye Studio是一款功能强大专业的多媒体视频优化压缩编码工具,它可以该显示多媒体文件帧,它们的大小,类型,时间,位置和顺序流;比特率,以及其他常见的视频流参数。 2. Elecard XMuxer Pro是一...
  • 三分钟弄清楚Java8 Stream 常用操作-

    万次阅读 2020-06-23 20:05:43
    Stream是Java8中的一大亮点,支持顺序和并行聚合操作的一系列元素,为了执行计算,流operations被组合成流管道 。 流管线由源(其可以是阵列,集合,生成函数,I / O通道等)组成,零个或多个中间操作 (其将流转换...
  • java8新特性------StreamApi

    万次阅读 2019-11-08 11:39:23
    什么是Streamstream是数据的渠道,用于操作数据源(集合、数组等)所生成的元素序列。 区别在于 集合操作的是数据,而流是进行计算 Stream特点 Stream 不会自己存储元素 Stream 不会改变源对象,会返回一...
  • JDK新特性——Stream代码简洁之道

    千次阅读 多人点赞 2020-10-24 12:17:54
    Stream 是一组用来处理数组、集合的API,Stream API 提供了一种高效且易于使用的处理数据的方式。 Java 8 中之所以费这么大的功夫引入 函数式编程 ,原因有两个: 代码简洁函数式编程写出的代码简洁且意图明确,...
  • Stream API

    万次阅读 2020-03-29 19:04:13
    Java8新特性--操作集合Stream API
  • com.mongodb.MongoSocketReadException: Prematurely reached end of stream at com.mongodb.connection.SocketStream.read(SocketStream.java:88) ~[mongo-java-driver-3.2.2.jar:na] at ...
  • stream 和 parallelStream

    千次阅读 2018-12-06 18:00:05
    parallelStream是一个并行执行的流.它通过默认的ForkJoinPool,可能提高你的多线程任务的速度. parallelStream的作用 Stream具有平行处理能力,处理的过程会分而治之,也就是将一个大任务切分成多个小任务,这表示每...
  • Stream语法详解

    万次阅读 多人点赞 2016-05-16 11:32:22
    1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel aggregate operations. 我们来解读一下上面的那句话: Stream是元素的集合...
  • JAVA8 Stream接口,map操作,filter操作,flatMap操作

    万次阅读 多人点赞 2018-06-10 17:22:18
    这篇,我们来看Stream的一些中间操作,关于中间操作的一些介绍,可以看《JAVA8 stream接口 中间操作和终端操作》 1,filter操作,我们先看方法的定义 Stream<T> filter(Predicate<? super T> ...
  • 如下代码片段,为什么stringstream二次输入后再输出,结果没有值? ``` cout从小到大顺序输入链表1:"; //输入1 2 3 getline(cin,strIn); stringstream ss(strIn); while(ss>>value) //从string中按照空格...
  • Stream是Java8新引入的API,有着广泛的运用 创建一个Stream Stream创建之后,就不能修改 创建一个空的Stream StreamString> streamEmpty = Stream.empty(); 一般的,我们用如下这种写法避免空指针异常 ...
  • KafkaStream[], byte[]> kafkaStream = consumerMap.get(consumeTopic).get(0); ConsumerIterator[], byte[]> it = kafkaStream.iterator();//此行代码不会执行,停在这里 System.out.println("iterator:"+it)...
  • kafka Stream概念

    万次阅读 2016-12-15 00:11:10
    1.Kafka Stream?Kafka Streams是一套处理分析Kafka中存储数据的客户端类库,处理完的数据或者写回Kafka,或者发送给外部系统。它构建在一些重要的流处理概念之上:区分事件时间和处理时间、开窗的支持、简单有效的...

空空如也

1 2 3 4 5 ... 20
收藏数 113,987
精华内容 45,594
关键字:

stream