Java 8 数据流Stream的使用

7. Java8新特性-并行数据处理(parallel) 在JDK7之前,并行处理数据集合非常麻烦。首先需要自己明确的把包含数据的数据结构分成若干个子部分,第二需要给每个子部分分配一个独立的线程;第三需要在恰当的时候对它们进行同步来避免不希望出现的竞争条件,等待所有线程完成,最后把这些部分合并起来。 Doug Lea 在JDK7中引入了fork/join框架,让这些操作更稳定,更不易出错。 本节主要内容: 1. 用并行流并行处理数据 2. 并行流的性能分析 3. fork/join框架 4. 使用Spliterator分割流 学完本节期望能达到: 1. 熟练使用并 阅读详情

一.Java里面对Stream的定义:

A sequence of elements supporting sequential and parallel aggregate operations.

支持顺序和集合并行操作的一系列元素。

(1)Stream是元素的集合,类似于Iterator,单向,不可往复,数据只能遍历一次,遍历过一次数据即用尽了

(2)Stream 可以并行化操作,迭代器只能命令式地、串行化操作;

(3)Stream 的另外一大特点是,数据源本身可以是无限的。

二.创建Stream

1.通过Stream接口的静态工厂方法:

(1)of方法;

  (2)   generate方法;

(3)iterate方法;

import java.util.function.Supplier;
import java.util.stream.Stream;

public class NewStream {
    public static void main(String[] args) {

        //第一种  of方法;
        int shuzu[] = {4, 5, 6, 7, 8};
        Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5);
        integerStream.forEach(System.out::println);
        Stream<String> stringStream = Stream.of("taobao", "weixin", "baidu", "toutiao");
        stringStream.forEach(System.out::println);
        Stream.of(shuzu).forEach(System.out::println);
        //第二种  generate方法
        Stream.generate(new Supplier<Double>() {
            @Override
            public Double get() {
                return Math.random();
            }
        }).limit(10).forEach(System.out::println);

        //第三种  iterate方法
        Stream.iterate(1, item -> item + 1).limit(10).forEach(System.out::println);

    }
}

2.通过collection的子类来获取Stream(Collection接口有一个Stream方法,所以其所有子类都可以获取对应的Stream对象。)

        List list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.stream().forEach(System.out::println);
        LinkedList linkedList = new LinkedList();
        linkedList.add(6);
        linkedList.add(7);
        linkedList.add(8);
        linkedList.add(9);
        linkedList.add(10);
        //并行流
        linkedList.parallelStream().forEach(System.out::println);
        Set hashSet = new HashSet();
        hashSet.add(11);
        hashSet.add(12);
        hashSet.stream().forEach(System.out::println);

三 .Stream操作

操作类型

接口方法

Intermediate

(中间操作)

无状态(Stateless)map(mapToInt、mapToLong、flatmap、mapToDouble、 flatMapToInt、flatMapToLong、flatMapToDouble)、unordered、filter、 peek、 parallel 、sequential  、isParallel
有状态(Stateful)distinct、 sorted、limit、 skip

Terminal

(最终操作)

非短路操作forEach、forEachOrdered、 toArray、 reduce、collect、 max、min、count、

Short-circuiting

(短路操作)

anyMatch、allMatch、noneMatch、findFirst、 findAny

中间操作和结束操作:

中间操作只是一种标记,结束操作才会触发实际计算;

中间操作后可以跟随其他操作,可以进行多次中间操作,结束操作执行后Stream元素就被消费掉了,无法对一个Stream进行两次terminal操作。

中间操作又可以分为无状态的(Stateless)和有状态的(Stateful),无状态的中间操作是指元素的处理不受前面元素的影响,而有状态的中间操作必须等到所有元素处理之后才知道最终结果,比如排序是有状态操作,在读取所有元素之前并不能确定排序结果,filter是无状态操作,符合过滤条件就被选出来,不关注其他元素的状态;

结束操作又可以分为短路操作和非短路操作,短路操作是指不用处理全部元素就可以返回结果,比如找到第一个满足条件的元素。

1.map()和flatMap()使用

map():将提供的函数应用于流的元素的结果

flatmap():将提供的流处理函数应用于流元素后获得的流元素

 

2.filter()使用

filter():根据传入的表达式,筛选出符合条件的元素

 //   过滤不为null的元素    结果1 2 3 4 5 6 7 8 9
        Stream.of(1, 2, 3, 4, 5, null, 6, null, 7, null, 8, 9).
                filter(integerStreams -> integerStreams != null).forEach(System.out::println);

3.unordered()使用

4.forEach()和peek()使用

forEach()和peek()方法都可以接收一个Lambda表达式,然后在Stream的每个元素上执行该表达式。

不同的是:

forEach是terminal操作。peek是一个intermediate操作,可以多次操作Stream。

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class ForeachAndPeek {
    public static void main(String[] args) {

        Stream a = Stream.of("one", "two", "three", "four");
        /*
         * forEach对于流来说是terminal操作,a第一次forEach后,就被"消费"掉了,所以第二次forEach就会报错
         */
        a.forEach(System.out::println);
        //a.forEach(System.out::println);
        //Stream.of("one", "two", "three", "four").forEach(System.out::println).forEach(System.out::println);

        //这是两个不同的流去执行forEach操作,所以不会报错
        Stream.of("one", "two", "three", "four").forEach(System.out::println);
        Stream.of("one", "two", "three", "four").forEach(p -> System.out.println(p));
        /*
         * peek操作不是terminal操作,而是intermediate操作。所以可以多次操作Stream
         */
        Stream b = Stream.of("one", "two", "three", "four");
        /*
         * Stream b已经被操作或者被消费掉了,已经没有Stream b了,会报错。
         * 报错信息:stream has already been operated upon or closed
         */
        //b.peek(System.out::println);
        //可以用一个新的Stream接收,再操作新的Stream
        Stream c = b.peek(System.out::println).peek(p -> System.out.println(p));
        c.peek(System.out::println);
        /*
         * peek操作的用法
         */
        List streamList = Stream.of("one", "two", "three", "four").
                filter(e -> e.length() > 3).peek(e -> System.out.println("Filtered value: " + e)).
                map(String::toUpperCase).
                peek(e -> System.out.println("Mapped value: " + e)).collect(Collectors.toList());
        System.out.println(streamList);
    }
}

5.sequential()和parallel()和isParallel()的使用:

sequential()是将并行流转化称串行流。parallel是将串行流转化成并行流。

isParallel判断是否为并行执行,输出结果为true和false。

        List<Integer> list = new ArrayList<>();
        for (int i=1;i<=10;i++){
            list.add(i);
        }
        list.stream().parallel().forEach(a->System.out.print(a+","));
        System.out.println();
        list.parallelStream().sequential().forEach(a->System.out.print(a+","));
        System.out.println();
        System.out.println("===================");
        System.out.println(list.stream().isParallel());
        System.out.println(list.parallelStream().isParallel());
        System.out.println(list.stream().parallel().isParallel());
        System.out.println(list.parallelStream().sequential().isParallel());

输出结果为:

可以看出来,.parallel()输出的结果为乱序,.sequential() 方法输出的结果为顺序输出。

6.distinct()和count()使用

distinct():去重操作,输出结果为已经删除了重复元素的流元素;

count():返回流的元素个数;

public class distinct {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1);
        list.add("2");
        list.add(3L);
        list.add(1L);
        list.add(4L);
        list.add(3L);
        list.stream().forEach((a)-> System.out.print(a+ " "));
        System.out.println( "count:"+list.stream().count());
        list.stream().distinct().forEach((a)-> System.out.print(a+ " "));
        System.out.println( "count:"+list.stream().distinct().count());
    }
}

输出结果如下:

7.sorted()使用

sorted():将数据按自然顺序进行排序。

sorted(Comparator<T>):将数据按提供的比较符进行排序。

 

8.limit()和skip()的使用

limit(long) 返回 Stream 的前面long个元素;

skip(long)丢弃了Stream的前面long个元素;

public class SkipAndLimit {
    public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(5);
        list.add(6);
        list.add(3);
        list.add(4);
        list.add(7);
        list.add(8);
        list.add(9);
        list.add(6);
        list.add(3);
        list.add(4);
        list.stream().limit(3).forEach(System.out::print);
        System.out.println();
        System.out.println("~~~~~~~");
        list.stream().skip(3).forEach(System.out::print);
    }
}

输出结果集如下:

9.forEach()和forEachOrdered()使用

  forEach是并行处理的;

  forEachOrdered是按顺序处理的。

  所以forEach效率会略高一点。

package Stream;

import java.util.Arrays;
import java.util.List;

public class ForEachAndForEachOrdered {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Two","Three","One","Four","Five");
        list.stream().forEach(p->System.out.print(p+" "));
        System.out.println("。");
        list.stream().forEachOrdered(p->System.out.print(p+" "));
        System.out.println("。");
        //每次打印输出顺序是不一致的。
        list.parallelStream().forEach(p->System.out.print(p+" "));
        System.out.println("。");
        list.parallelStream().forEachOrdered(p->System.out.print(p+" "));
        System.out.println("。");
    }
}

10.toArray()使用

11.reduce()使用

reduce:将流的元素聚合为一个汇总值。

public class Reduce {
    public static void main(String[] args) {
        // 字符串连接,concat = "ABCD"
        String concat = Stream.of("A", "B", "C", "D").reduce("", String::concat);
        System.out.println(concat);
        // 求最小值,minValue = -3.0
        double minValue = Stream.of(-1.5, 1.0, -3.0, -2.0).reduce(Double.MAX_VALUE, Double::min);
        System.out.println(minValue);
        // 求和,sumValue = 1009, 有起始值(起始值+Sum(-1+1+2+3+4))
        int sumValue = Stream.of(-1, 1, 2, 3, 4).reduce(1000, Integer::sum);
        System.out.println(sumValue);
        // 求和,sumValue = 10, 无起始值
        sumValue = Stream.of(1, 2, 3, 4).reduce(Integer::sum).get();
        System.out.println(sumValue);
        // 过滤,字符串连接,concat = "BDF"
        concat = Stream.of("a", "B", "c", "D", "e", "F").filter(x -> x.compareTo("Z") < 0).reduce("", String::concat);
        System.out.println(concat);
    }
}

12.collect()使用

collect():将流的元素聚合到一个汇总结果容器中。

List<Integer> list  = Stream.of(1,2,3,4,5,6,7,8,9).collect(Collectors.toList());

13.max()和min()使用

max()返回流中最大的值;

min()返回流中最小的值;

这几种方式都是可以的:

package Stream;

import java.util.Comparator;
import java.util.stream.Stream;

public class MaxAndMin {
    public static void main(String[] args) {
        int a = Stream.of(-99, -100, 3, 5, 9, 99).max(Integer::compare).get();//99
        int b = Stream.of(-99, -100, 3, 5, 9, 99).min(Integer::compare).get();//-100
        int c = Stream.of(-99, -100, 3, 5, 9, 99).max((n, m) -> Integer.compare(n, m)).get();//99
        int d = Stream.of(-99, -100, 3, 5, 9, 99).min((n, m) -> Integer.compare(n, m)).get();//-100
        int e = Stream.of(-99, -100, 3, 5, 9, 99).max(Comparator.comparing(Integer::valueOf)).get();//99
        int f = Stream.of(-99, -100, 3, 5, 9, 99).min(Comparator.comparing(Integer::valueOf)).get();//-100
        int j = Stream.of(-99, -100, 3, 5, 9, 99).mapToInt(i -> i).max().getAsInt();//99
        int l = Stream.of(-99, -100, 3, 5, 9, 99).mapToInt(i -> i).min().getAsInt();//-100
        System.out.println("a:"+a);
        System.out.println("b:"+b);
        System.out.println("c:"+c);
        System.out.println("d:"+d);
        System.out.println("e:"+e);
        System.out.println("f:"+f);
        System.out.println("j:"+j);
        System.out.println("l:"+l);
    }
}

输出结果如下:

还有一种经典的错误demo,这种方式是不可行的:

因为stream().max()是以返回值的正数,负数和0来判断大小的

 public static void main(String[] args) {
        //错误的用法
        int g = Stream.of(-99,-100,3,5,9,99).max(Integer::max).get();

        int h = Stream.of(-99,-100,3,5,9,99).min((v,k) -> {
            int result = Integer.max(v, k);
            return result;
        }).get();
        System.out.println("g:"+g);
        System.out.println("h:"+h);

    }

14.allMatch(),anyMatch()和noneMatch()的使用

allMatch:Stream中全部元素符合传入的条件返回true;

anyMatch:Stream中有一个元素符合传入的条件就返回true;

noneMatch:Stream中没有一个元素符合传入的条件返回true;

        List<Integer> list = new ArrayList<>();
        for (int i=1;i<=10;i++){
            list.add(i);
        }
        list.stream().forEach(System.out::println);
        System.out.println("全部大于9:"+list.stream().allMatch(a->a>9));
        System.out.println("全部大于0:"+list.stream().allMatch(a->a>0));
        System.out.println("有一个及以上大于9:"+list.stream().anyMatch(a->a>9));
        System.out.println("有一个及以上大于10:"+list.stream().anyMatch(a->a>10));
        System.out.println("没有一个大于9:"+list.stream().noneMatch(a->a>9));
        System.out.println("没有一个大于10:"+list.stream().noneMatch(a->a>10));

输出结果为:

15.findFirst()和findAny()的使用

findFirst()返回第一个元素,如果流为空,则返回一个空Optional。

findAny()返回任意一个元素,如果流为空,则返回一个空Optional。对于并行流来说可能多次返回结果不一致,但是性能会略优秀于findFirst()。

public class FindFirstAndDFindAny {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();
        for (int i = 1; i <= 10000; i++) {
            list.add(i);
        }
        System.out.println(list.parallelStream().findAny());
        System.out.println(list.parallelStream().findAny());
        System.out.println(list.parallelStream().findAny());
        System.out.println(list.parallelStream().findAny());
        System.out.println(list.parallelStream().findAny());
        System.out.println(list.parallelStream().findAny());
        System.out.println(list.parallelStream().findAny());
        System.out.println(list.parallelStream().findAny());
        System.out.println(list.parallelStream().findFirst());
        System.out.println(list2.parallelStream().findFirst());
    }
}

结果如下:

可以看出多次执行并行流的findAny操作,结果是不一样的。

 

JAVA:Stream 并行(parallel)详解及优化实践 Java 8 的 Stream API 提供了并行处理能力,通过 parallel() 或 parallelStream() 可利用多核 CPU 提升性能。但使用不当会导致线程安全、性能下降等问题。本文解析了并行流的工作原理(基于 ForkJoinPool)、常见陷阱(如非线程安全操作、小数据量开销大)及优化方案:确保线程安全、大数据量适用、使用 unordered() 提升效率、自定义线程池控制并发等。建议 CPU 密集型大数据任务使用并行流,而 IO 密集型或小数据量场景慎用,并通过性能测试验证效果。 阅读详情

相关推荐

Java8中并行化流parallel的使用

前面讲Stream的常用api的使用,在处理一些集合数据时很方便,但是在执行一些耗时或是占用资源很高的任务的时候,串行化的流无法带来速度/性能上的提升,除了使用多线程来并行执行任务之外,Stream中也提供了这样的方法。parallelStream()方法或者是使用stream().parallel()来转化为并行流。

BADAO_LIUMANG_QIZHI的博客 3114

java8 Stream 常用方法讲解

java8 中新增了一种Stream流的特性,这种方式跟写SQL似的,一个集合看成一个数据表,Stream看成条件,然后返回一个新的数据。Steam API 可以极大提高程序员的效率,可以让程序员写出高效,干净,简洁的代码,唯一一点不好的地方就是如果程序员不会这个你会看不懂。就是一个单线程,一个多线程的意思。使用Stream操作集合和以前操作集合是不同的,Stream操作特征主要有两种1. 管道流式处理数据。2. 内部迭代。就比如说我现在要筛选集合中年龄等于22的数据原来做法是 java8 stream做法

暴走的山交君的博客 2694

ADNI数据集下载(详细)

刚刚接触到这个数据集的时候比较头疼,用了好长的时间才把下载过程和预处理过程弄明白。需要发送电子邮件给官方平台,收到回信后才能够下载到数据集。 1、ADNI账号注册 第一步:搜索百度打开ADNI 第二步,点击ADTA&amp;amp;SAMPLES 第三步:一直将鼠标往下拉 点击ADNI,进入里面填写信息。需要填写的信息还是挺多的,耐心填写,再等到邮件回复就可以了 2、ADNI数据集下载 登录申请的邮...

蜗牛遥遥 3万+

串行流 Stream 与并行流 parallelStream

简述:在创建Stream流对象时,默认创建都是串行流。两种方式创建Stream并行流:第1种方式是通过Collection集合接口中的parallelStream()方法直接将集合类型的源数据转变为Stream并行流;第2种方式通过BaseStream接口中的parallel()方法将Stream串行流转变为并行流。BaseStream接口还提供了isParallel()方法,用于判断当Stream流对象是否为并行流,返回值为boolean类型。

人间剧场的博客 1868

瑞芯微RK3576开发板实战:6TOPS NPU如何加速你的AIoT项目(附性能测试)

本文以瑞芯微RK3576开发板为核心,深入探讨其6TOPS NPU在AIoT项目中的实战应用。通过详细的性能测试对比,展示了NPU如何将AI模型推理速度提升15倍以上,并大幅降低CPU负载。文章涵盖从环境搭建、模型转换优化到多屏异显与系统级调优的全流程,为开发者提供了将硬件算力转化为实际项目加速效果的完整指南。

oauth7security的博客 820

MIPI video mode 和 command mode 的区别

1、何为LCD RAM? LCD 是指字面意思是液晶显示屏(Liquid Crystal Display), 而RAM: 随机存取存储器(Random-Access Memory),两者完全是风马牛不相及的东西。 下图是一个标准的LCD的爆炸图(不含TP),请注意图中红色mark的地方:控制IC-- LCD的大脑。所谓的LCD RAM自然是指此大脑是否包含RAM. 题外话<不感兴趣的...

精诚所至 4689

java8 stream rxjava_从Java 8 stream 到 rxjava, 记录一次数据流的处理任务

在java8之前, 一直都是用guava中的Iterables和FluentIterables来处理数据流。 java8 的 lambda 和 方法引用 极大的简化了内部类的处理。不过stream还是比较初级的,实际使用过程中只能处理简单的数据流任务。主要遇到的问题是,在调用消费方法(例如forEach, collect)之后。该流即为终结状态,无法再复用。 无法优雅地需要处理大量中间结果的复杂计...

weixin_36189159的博客 189

大语言模型在构建UNSPSC 分类数据中的应用

UNSPSC 是联合国标准产品和服务代码。本文研究如何利用大语言模型生成分类系统的分析

姚家湾博客 1847

java中数据流_详解java8中的Stream数据流

Stream是java8引入的一个重度使用lambda表达式的API。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。直观意味着开发者在写代码时只需关注他们想要的结果是什么而无需关注实现结果的具体方式。这一章节中,我们将介绍为什么我们需要一种新的数据处理API、Collection和Stream的不同之处以及如何将StreamAPI应用到...

weixin_33452735的博客 195

【GameFramework框架内置模块】10、本地化(Localization)

本地化(Localization),也就是我们所说的不同地区的语言适配,比如说中文版“你好”,英文版是“Hello”。GameFramework在本地化方面,不仅支持文本的本地化,还支持任意资源的本地化,比如说游戏中释放烟花的特效也可以做出不同地区的版本,使得中文版烟花里面的“新年好”字样的特效,在英文版里面是“Happy New Year”字样的特效。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2298

推荐11个顶级的Claude Code Skills

ClaudeCode的Skills系统为程序员提供了11个强大的AI辅助工具,包括代码审查、重构建议、单元测试生成、API文档自动生成、性能分析、安全扫描、数据库迁移脚本生成、CI/CD配置、依赖管理、ER图生成和日志分析等功能。这些"技能包"可大幅提升开发效率,从代码质量到协作沟通全方位优化工作流程。用户可根据需求选择2-3个核心功能开始尝试,熟练后还可自定义Skills。该系统需要配合Anthropic的API使用,建议先在小型项目测试再应用于核心业务。

分享AI、区块链技术及应用,未来已来 1847

Java 8 Stream 数据流效率分析

来源:https://blog.youkuaiyun.com/Al_assad/article/details/82356606Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型:Stream代表对象引用流,此外还有一系列特化流,如 IntStream,LongStream,DoubleStream等 ),Ja...

程序猿DD 1533

(第七章)FAST开发方法

摘要: FAST是一种轻量级、业务驱动的系统分析与开发框架,适用于中小型项目,强调快速交付和组件化开发。其核心包括8个阶段:范围定义、问题分析、需求分析、逻辑设计、决策分析、物理设计、构造测试和安装发布。特点为结构化、用户参与、迭代渐进,适合需求明确且需快速交付的项目。与RUP(重量级)、敏捷(极轻量)相比,FAST更侧重业务分析和模块化开发。软考中可通过口诀“范围问题求逻辑,决策物理构发布”记忆阶段,并掌握五大开发方法(瀑布、原型、FAST、RUP、敏捷)的核心区别及适用场景。

echo的博客 913

阿里java高级面试题及答案,Java8 Stream 数据流,java面试题及答案解析

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。Mybatis面试专题MySQL面试专题并发编程面试专题一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

2401_84006689的博客 1059

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

java8中stream流,详解java8中的Stream数据流

Stream是java8引入的一个重度使用lambda表达式的API。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。直观意味着开发者在写代码时只需关注他们想要的结果是什么而无需关注实现结果的具体方式。这一章节中,我们将介绍为什么我们需要一种新的数据处理API、Collection和Stream的不同之处以及如何将StreamAPI应用到...

weixin_42501130的博客 183

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java中的stream流_详解java8中的Stream数据流

Stream是java8引入的一个重度使用lambda表达式的API。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。直观意味着开发者在写代码时只需关注他们想要的结果是什么而无需关注实现结果的具体方式。这一章节中,我们将介绍为什么我们需要一种新的数据处理API、Collection和Stream的不同之处以及如何将StreamAPI应用到...

weixin_42644410的博客 337

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java从流里筛选数据_详解java8中的Stream数据流

Stream是java8引入的一个重度使用lambda表达式的API。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。直观意味着开发者在写代码时只需关注他们想要的结果是什么而无需关注实现结果的具体方式。这一章节中,我们将介绍为什么我们需要一种新的数据处理API、Collection和Stream的不同之处以及如何将StreamAPI应用到...

weixin_39596739的博客 1533

JAVA8之数据流Stream

  在JAVA8之前的传统编程方式,如果我们需要操作一个集合数据,需要使用集合提供的API,通过一个循环去获取集合的元素,这种访问数据的方式会使代码显得臃肿,JAVA8新引入的Stream类,用于重新封装集合数据,通过使用流式Stream代替常用集合数组、list和map的遍历操作可以极大的提高效率。 一、Stream的组成 数据源(Source) + 0个或多个中间操作(in...

weixin_30314813的博客 115

Java 8 Stream 数据流效率分析和解读

Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util.stream (这个包里有若干流类型:Stream代表对象引用流,此外还有一系列特化流,如 IntStream,LongStream,DoubleStream等 ),Java 8 引入的的Stream主要用于取代部分Collection的操作,每个流代表一个值序列,流提供一系列常用的聚集操作,可以便捷的在它上面进行各种运算。集合类库也提供了便捷的方式使我们可以以操作流的方式使用集合、数组以及其它数据结构;

吴名氏的博客 14万+

java8流库_详解java8中的Stream数据流

详解java8中的Stream数据流发布于 2020-3-27|复制链接Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。接下来通过本文给大家分享java8中的Stream数据流知识,感兴趣的朋友一起看看吧Stream是java8引入的一个重度使用lambda表达式的API。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提...

weixin_39874589的博客 127

java8 stream 分组_java8 stream groupingBy 数据流分组

概述,使用java8的 streamgroupingBy ,实现对list中的数据按照年龄对person对象的分组1.Personpackage com.qimh.springbootfiledemo;public class Person {private Integer age;private String name;public Integer getAge() {return age;}...

weixin_35983438的博客 265

java 数据流 中文_Java8中的Stream数据流的实例分析

Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。接下来通过本文给大家分享java8中的Stream数据流知识,感兴趣的朋友一起看看吧Stream是java8引入的一个重度使用lambda表达式的API。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。直观意味着开发者在写代码时只需...

weixin_36259655的博客 102

Java8 Stream 数据流,大数据量下的性能效率怎么样?

来源:blog.youkuaiyun.com/Al_assad/article/details/82356606Stream 是Java SE 8类库中新增的关键抽象,它被定义于 java.util....

Java笔记虾 3324
上一篇: Intellij IDEA ,按Ctrl+左键,不能进入类或方法,提示Cannot find declaration to go to。
下一篇: 书写邮件的基本方法和注意事项
田小江爱分享
博客等级 码龄10年 34粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值