热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java8新增功能详解:StreamAPI流处理技术

Java8引入了StreamAPI,这一新特性极大地增强了集合数据的处理能力。通过StreamAPI,开发者可以更加高效、简洁地进行集合数据的遍历、过滤和转换操作。本文将详细解析StreamAPI的核心概念和常见用法,帮助读者更好地理解和应用这一强大的工具。

java8新特性(4)— Stream流


遍历集合更强大

package com.common.jdk8;import java.util.*;
import java.util.stream.Collectors;//Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
//Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
//Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
//这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
//元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。
public class Jdk8Test4 {//什么是 Stream&#xff1f;//Stream&#xff08;流&#xff09;是一个来自数据源的元素队列并支持聚合//元素是特定类型的对象&#xff0c;形成一个队列。 Java中的Stream并不会存储元素&#xff0c;而是按需计算。//数据源 流的来源。 可以是集合&#xff0c;数组&#xff0c;I/O channel&#xff0c; 产生器generator 等。//聚合操作 类似SQL语句一样的操作&#xff0c; 比如filter, map, reduce, find, match, sorted等。//和以前的Collection操作不同&#xff0c; Stream操作还有两个基础的特征&#xff1a;//Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道&#xff0c; 如同流式风格&#xff08;fluent style&#xff09;。 这样做可以对操作进行优化&#xff0c; 比如延迟执行(laziness)和短路( short-circuiting)。//内部迭代&#xff1a; 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代&#xff0c; 这叫做外部迭代。 Stream提供了内部迭代的方式&#xff0c; 通过访问者模式(Visitor)实现。public static void main(String args[]){System.out.println("使用 Java 7: ");// 计算空字符串List<String> strings &#61; Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");System.out.println("列表: " &#43;strings);long count &#61; getCountEmptyStringUsingJava7(strings);System.out.println("空字符数量为: " &#43; count);count &#61; getCountLength3UsingJava7(strings);System.out.println("字符串长度为 3 的数量为: " &#43; count);// 删除空字符串List<String> filtered &#61; deleteEmptyStringsUsingJava7(strings);System.out.println("筛选后的列表: " &#43; filtered);// 删除空字符串&#xff0c;并使用逗号把它们合并起来String mergedString &#61; getMergedStringUsingJava7(strings,", ");System.out.println("合并字符串: " &#43; mergedString);List<Integer> numbers &#61; Arrays.asList(3, 2, 2, 3, 7, 3, 5);// 获取列表元素平方数List<Integer> squaresList &#61; getSquares(numbers);System.out.println("平方数列表: " &#43; squaresList);List<Integer> integers &#61; Arrays.asList(1,2,13,4,15,6,17,8,19);System.out.println("列表: " &#43;integers);System.out.println("列表中最大的数 : " &#43; getMax(integers));System.out.println("列表中最小的数 : " &#43; getMin(integers));System.out.println("所有数之和 : " &#43; getSum(integers));System.out.println("平均数 : " &#43; getAverage(integers));System.out.println("随机数: ");// 输出10个随机数Random random &#61; new Random();for(int i&#61;0; i < 10; i&#43;&#43;){System.out.println(random.nextInt());}System.out.println("使用 Java 8: ");System.out.println("列表: " &#43;strings);count &#61; strings.stream().filter(string->string.isEmpty()).count();System.out.println("空字符串数量为: " &#43; count);count &#61; strings.stream().filter(string -> string.length() &#61;&#61; 3).count();System.out.println("字符串长度为 3 的数量为: " &#43; count);filtered &#61; strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.toList());System.out.println("筛选后的列表: " &#43; filtered);mergedString &#61; strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.joining(", "));System.out.println("合并字符串: " &#43; mergedString);squaresList &#61; numbers.stream().map( i ->i*i).distinct().collect(Collectors.toList());System.out.println("Squares List: " &#43; squaresList);System.out.println("列表: " &#43;integers);IntSummaryStatistics stats &#61; integers.stream().mapToInt((x) ->x).summaryStatistics();System.out.println("列表中最大的数 : " &#43; stats.getMax());System.out.println("列表中最小的数 : " &#43; stats.getMin());System.out.println("所有数之和 : " &#43; stats.getSum());System.out.println("平均数 : " &#43; stats.getAverage());System.out.println("随机数: ");random.ints().limit(10).sorted().forEach(System.out::println);// 并行处理count &#61; strings.parallelStream().filter(string -> string.isEmpty()).count();System.out.println("空字符串的数量为: " &#43; count);}private static int getCountEmptyStringUsingJava7(List<String> strings){int count &#61; 0;for(String string: strings){if(string.isEmpty()){count&#43;&#43;;}}return count;}private static int getCountLength3UsingJava7(List<String> strings){int count &#61; 0;for(String string: strings){if(string.length() &#61;&#61; 3){count&#43;&#43;;}}return count;}private static List<String> deleteEmptyStringsUsingJava7(List<String> strings){List<String> filteredList &#61; new ArrayList<String>();for(String string: strings){if(!string.isEmpty()){filteredList.add(string);}}return filteredList;}private static String getMergedStringUsingJava7(List<String> strings, String separator){StringBuilder stringBuilder &#61; new StringBuilder();for(String string: strings){if(!string.isEmpty()){stringBuilder.append(string);stringBuilder.append(separator);}}String mergedString &#61; stringBuilder.toString();return mergedString.substring(0, mergedString.length()-2);}private static List<Integer> getSquares(List<Integer> numbers){List<Integer> squaresList &#61; new ArrayList<Integer>();for(Integer number: numbers){Integer square &#61; new Integer(number.intValue() * number.intValue());if(!squaresList.contains(square)){squaresList.add(square);}}return squaresList;}private static int getMax(List<Integer> numbers){int max &#61; numbers.get(0);for(int i&#61;1;i < numbers.size();i&#43;&#43;){Integer number &#61; numbers.get(i);if(number.intValue() > max){max &#61; number.intValue();}}return max;}private static int getMin(List<Integer> numbers){int min &#61; numbers.get(0);for(int i&#61;1;i < numbers.size();i&#43;&#43;){Integer number &#61; numbers.get(i);if(number.intValue() < min){min &#61; number.intValue();}}return min;}private static int getSum(List numbers){int sum &#61; (int)(numbers.get(0));for(int i&#61;1;i < numbers.size();i&#43;&#43;){sum &#43;&#61; (int)numbers.get(i);}return sum;}private static int getAverage(List<Integer> numbers){return getSum(numbers) / numbers.size();}
}

运行结果

使用 Java 7:列表: [abc, , bc, efg, abcd, , jkl]空字符数量为: 2字符串长度为 3 的数量为: 3筛选后的列表: [abc, bc, efg, abcd, jkl]合并字符串: abc, bc, efg, abcd, jkl平方数列表: [9, 4, 49, 25]列表: [1, 2, 13, 4, 15, 6, 17, 8, 19]列表中最大的数 : 19列表中最小的数 : 1所有数之和 : 85平均数 : 9随机数:-8845067758448462981181770977-268099100-20767820571256561986802112096-859138137-194403122-1546201209使用 Java 8:列表: [abc, , bc, efg, abcd, , jkl]空字符串数量为: 2字符串长度为 3 的数量为: 3筛选后的列表: [abc, bc, efg, abcd, jkl]合并字符串: abc, bc, efg, abcd, jklSquares List: [9, 4, 49, 25]列表: [1, 2, 13, 4, 15, 6, 17, 8, 19]列表中最大的数 : 19列表中最小的数 : 1所有数之和 : 85平均数 : 9.444444444444445随机数:-1118525426-847572210-632355909-447013487-1523942166699336748595529656337063410283633211283705449空字符串的数量为: 2

推荐阅读
  • 使用lambda表达式排序Collections.sort(temp,(Stringa,Stringb)-{returnb.compareTo(a);});Collections ... [详细]
  • 本文深入探讨了Python中的高阶函数和Lambda表达式的使用方法,结合实际案例解析其应用场景,帮助开发者更好地理解和运用这些强大的工具。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 深入解析for与foreach遍历集合时的性能差异
    本文将详细探讨for循环和foreach(迭代器)在遍历集合时的性能差异,并通过实际代码示例和源码分析,帮助读者理解这两种遍历方式的不同之处。文章内容丰富且专业,旨在为编程爱好者提供有价值的参考。 ... [详细]
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • Linux设备驱动程序:异步时间操作与调度机制
    本文介绍了Linux内核中的几种异步延迟操作方法,包括内核定时器、tasklet机制和工作队列。这些机制允许在未来的某个时间点执行任务,而无需阻塞当前线程,从而提高系统的响应性和效率。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文提供了使用Java实现Bellman-Ford算法解决POJ 3259问题的代码示例,详细解释了如何通过该算法检测负权环来判断时间旅行的可能性。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
author-avatar
ian
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有