Java Lambda表达式的应用--Stream API操作集合框架

Stream Api详解 Stream api详解 阅读详情

概述

这一篇文章,要有Lambda表达式的基础,在此对Lambda的使用不做介绍,请看前一篇对Java lambda的使用。

学以致用,学习Lambda表达式,就冲java 8 新的库Stream来说就够本。一定将Lambda和Stream分开来学,先把Lambda表达式玩转了,在深入学习Stream就容易了,因为里面大量的lambda的写法,不要因为lambda不熟练影响了Stream API的使用,时刻提醒自己方法内传递的是函数式接口的对象,lambda只不过是重写了接口的方法体。

前提

使用Stream前,先来着重学习几个java8函数式接口。

在学习了解之前,希望大家能记住几个单词,掌握这几个单词,什么3,40个官方的函数接口都是小问题了,不信的话接着往下看啦。ok,那这几个单词呢分别是supplier提供者 ,consumer消费者 ,function函数,Predicate断言, operation运算符, binary二元(就是数学里二元一次方程那个二元,代表2个的意思)。

  • Function<T, R>:接受一个参数T,返回结果R
  • Predicate<T>:接受一个参数T,返回boolean
  • Supplier<T>:不接受任何参数,返回结果T
  • Consumer<T>:接受一个参数T,不返回结果
  • UnaryOperator<T>:继承自Function<T, T>,接受一个参数T,返回相同类型T的结果
  • BiFunction<T, U, R>:接受两个参数T和U,返回结果R
  • BinaryOperator<T>:继承自BiFunction<T, T, T>,接受两个相同类型T的参数,返回相同类型T的结果

请将上面几个函数式接口,清晰的记在脑子里(前面4个使用量大),这几个接口的方法其实是高度再高度的抽象,根据实际使用几乎涵盖了方法应该有情况。具体如下:

Functio<t,r>接口

function,顾名思义,函数的意思,这里的函数是指数学上的函数哦,你也可以说是严格函数语言中的函数,例如haskell里的,他接受一个参数,返回一个值,永远都是这样,是一个恒定的,状态不可改变的方法。其实想讲函数这个彻底将明白可以再开一篇博客了,所以这里不详细的说了。
上面说到,函数接口是对行为的抽象,因此我方便大家理解,就用java中的方法作例子。

Fcuntion接口是对接受一个T类型参数,返回R类型的结果的方法的抽象,通过调用apply方法执行内容。

 public static void main(String[] args) {
        Function<String> function= s -> s + "你好";
        String a = function.apply("helloWorld!");
        System.out.println(a);
        //控制台输出 helloWorld!你好
    }

Consumer 接口

Consumer 接口翻译过来就是消费者,顾名思义,该接口对应的方法类型为接收一个参数,没有返回值,可以通俗的理解成将这个参数'消费掉了',一般来说使用Consumer接口往往伴随着一些期望状态的改变或者事件的发生,例如最典型的forEach就是使用的Consumer接口,虽然没有任何的返回值,但是却向控制台输出了语句。
Consumer 使用accept对参数执行行为

 public static void main(String[] args) {
        Consumer<String> printString = s -> System.out.println(s);
        printString.accept("helloWorld!");
        //控制台输出 helloWorld!
    }

Supplier 接口

Supplier 接口翻译过来就是提供者,和上面的消费者相反,该接口对应的方法类型为不接受参数,但是提供一个返回值,通俗的理解为这种接口是无私的奉献者,不仅不要参数,还返回一个值,使用get()方法获得这个返回值

public static void main(String[] args) {
      Supplier<String> getInstance = () -> "HelloWorld!";
      System.out.println(getInstance.get());
      // 控偶值台输出 HelloWorld
}

Predicate 接口

predicate<t,boolean> 谓语接口,顾名思义,中文中的‘是’与‘不是’是中文语法的谓语,同样的该接口对应的方法为接收一个参数,返回一个Boolean类型值,多用于判断与过滤,当然你可以把他理解成特殊的Funcation<t,r>,但是为了便于区分语义,还是单独的划了一个接口,使用test()方法执行这段行为

public static void main(String[] args) {
     Predicate<Integer> predOdd = integer -> integer % 2 == 1;
     System.out.println(predOdd.test(5));
     //控制台输出 true
 }

其他的接口

介绍完正面这四种最基本的接口,剩余的接口就可以很容易的理解了,java8中定义了几十种的函数接口,但是剩下的接口都是上面这几种接口的变种,大多为限制参数类型如IntPredicate等。

熟悉了以上几个接口,咱们就可以踏实的学习集合框架的新操作了。

Java 8 Stream

当我们使用一个流的时候,通常包括三个基本步骤:

获取一个数据源(source)→ 数据转换→执行操作获取想要的结果,每次转换原有 Stream 对象不改变,返回一个新的 Stream 对象(可以有多次转换),这就允许对其操作可以像链条一样排列,变成一个管道。

Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 取重,排序,聚合等。

元素流在管道中经过一系列中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

先来看看一个例子:

List<Integer> transactionsIds = 
widgets.stream()
             .filter(b -> b.getColor() == RED)
             .sorted((x,y) -> x.getWeight() - y.getWeight())
             .mapToInt(Widget::getWeight)
             .sum();

什么是Stream?

Stream(流)是一个来自数据源的元素队列并支持聚合操作

  • 元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。
  • 数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。
  • 聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。

和以前的Collection操作不同, Stream操作还有两个基础的特征:

  • Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格(fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( short-circuiting)。
  • 内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。

创建Stream

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

  • of(T... values):返回含有多个T元素的Stream
  • generate(Supplier<T> s):返回一个无限长度的Stream

2.在 Java 8 中, 集合接口有两个方法来生成流:(使用最多就是对集合创建stream)

  • stream() − 为集合创建串行流。
  • parallelStream() − 为集合创建并行流。

3.数组的创建方法:

  • Arrays.stream(T[] array)

4.其他方式创建

  • Random.ints()
  • BitSet.stream()
  • Pattern.splitAsStream(java.lang.CharSequence)
  • JarFile.stream()
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream()
                        .filter(string -> !string.isEmpty())
                        .collect(Collectors.toList());

对于Stream的使用就是使用其API,关键是其中方法的参数是各种各样的函数式接口,来看看Stream中的方法:

forEach(Collection接口中添加新forEach的方法,使用相同)

void forEach(Consumer<? super T> action);

Stream 提供了新的方法 'forEach' 来迭代流中的每个数据。以下代码片段使用 forEach 输出了10个随机数:

Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

map

<R> Stream<R> map(Function<? super T, ? extends R> mapper);

map方法将对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素。为了提高处理效率,官方已封装好了,三种变形:mapToDouble,mapToInt,mapToLong。其实很好理解,如果想将原Stream中的数据类型,转换为double,int或者是long是可以调用相对应的方法。以下代码片段使用 map 输出了元素对应的平方数:

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// 获取对应的平方数
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());

filter

Stream<T> filter(Predicate<? super T> predicate);

filter方法对原Stream按照指定条件过滤,在新建的Stream中,只包含满足条件的元素,将不满足条件的元素过滤掉。以下代码片段使用 filter 方法过滤出空字符串:

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量
int count = strings.stream().filter(string -> string.isEmpty()).count();

limit

Stream<T> limit(long maxSize);

limit 方法用于获取指定数量的流。 以下代码片段使用 limit 方法打印出 10 条数据:

Random random = new Random();
random.ints().limit(10).forEach(System.out::println);

sorted

Stream<T> sorted(Comparator<? super T> comparator);

sorted 方法用于对流进行排序。以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序:(有无参重载)

Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);

peek

Stream<T> peek(Consumer<? super T> action);

peek方法生成一个包含原Stream的所有元素的新Stream,同时会提供一个消费函数(Consumer实例),新Stream每个元素被消费的时候都会执行给定的消费函数,并且消费函数优先执行

Stream.of(1, 2, 3, 4, 5)
        .peek(integer -> System.out.println("accept:" + integer))
        .forEach(System.out::println);

skip

Stream<T> skip(long n);

skip方法将过滤掉原Stream中的前N个元素,返回剩下的元素所组成的新Stream。如果原Stream的元素个数大于N,将返回原Stream的后(原Stream长度-N)个元素所组成的新Stream;如果原Stream的元素个数小于或等于N,将返回一个空Stream。

Stream.of(1, 2, 3,4,5) 
    .skip(2) 
    .forEach(System.out::println); 
// 打印结果 
// 3,4,5

并行(parallel)程序

parallelStream 是流并行处理程序的代替方法。以下实例我们使用 parallelStream 来输出空字符串的数量:

List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
// 获取空字符串的数量
int count = strings.parallelStream().filter(string -> string.isEmpty()).count();

concat

public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b);

concat方法将两个Stream连接在一起,合成一个Stream。若两个输入的Stream都时排序的,则新Stream也是排序的;若输入的Stream中任何一个是并行的,则新的Stream也是并行的;若关闭新的Stream时,原两个输入的Stream都将执行关闭处理。

Stream.concat(Stream.of(1, 2, 3), Stream.of(4, 5))
       .forEach(integer -> System.out.print(integer + "  "));
// 打印结果
// 1  2  3  4  5 

distinct

distinct方法以达到去除掉原Stream中重复的元素,生成的新Stream中没有没有重复的元素。

Stream.of(1,2,3,1,2,3)
        .distinct()
        .forEach(System.out::println); 
// 打印结果:1,2,3

count

count方法将返回Stream中元素的个数。

long count = Stream.of(1, 2, 3, 4, 5)
        .count();
System.out.println("count:" + count);// 打印结果:count:5

Collectors 合并器

Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串:

List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
 
System.out.println("筛选列表: " + filtered);
String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
System.out.println("合并字符串: " + mergedString);

等还有其他一些API使用不是很频繁,如需使用请查看官方API。

(完)

Java中的函数式编程:从Lambda表达式到Stream API 自Java 8引入函数式编程特性以来,开发者们获得了一种更加简洁、高效的编程方式。函数式编程是指通过将函数作为一等公民的形式来编写代码,减少不必要的样板代码,使代码更加简洁易读,尤其适合于处理集合类数据。Lambda表达式作为Java 8的核心更新之一,为我们提供了更具表现力的方式来定义行为,同时Stream API使得集合的处理变得更加直观和高效。本文深入探讨了Java中的Lambda表达式、方法引用、函数式接口,以及Stream API的强大功能,结合实际案例和详细的代码示例,帮助开发者充分掌握这些特性 阅读详情

相关推荐

Java Lambda表达式与Stream API

Lambda 表达式是 Java 8 引入的一种简洁表示匿名函数的语法形式。它可以让代码更简洁、减少样板代码,特别是在函数式编程的场景下。

944

java 8 lambda如何使用_Java 8新特性:学习如何使用Lambda表达式(一)

作者:享学课堂Peter老师转载请声明出处!我将分为两篇系列文章来描述了使用Java 8的新特性 - lambda表达式。目录持续关注我,分享更多干货。介绍我们为什么需要lambdas?Lambdas的语法功能接口方法参考构造函数参考可变范围默认方法结论介绍Java 8版本是当前java界流行最广的一个版本。它的主要改进是在面向对象的基础上增加了对函数式编程的支持。在本文中,我将展示lambda的...

weixin_31302909的博客 382

JDK1.8 API 中文 CHM

JDK1.8 API 中文 CHM,Java开发人员必须拥有的API CHM

java 8 新特性_Java8新特性Stream

Stream(在阅读本文前,请务必掌握Lambda表达式以及方法引用的使用:Lambda表达式——方法引用,Java8新特性Lambda表达式,在本文的示例中,使用了大量的Lambda表达式)。Stream是Java8中的一大亮点,它与传统的IO流是完全不同的。传统的IO流是在各数据设备节点之间进行传输。而Stream是一种异类的数据操作——聚合操作。集合是Java中批量数据的常用容器,如果我们要...

weixin_36301296的博客 243

jdk1.8 api 帮助文档中文.CHM(真正的全中文)

jdk1.8 api 帮助文档中文.CHM(真正的全中文),真正的全中文 真正的全中文, 真正的全中文

Java8中Lambda表达式使用和Stream API详解

主要给大家介绍了关于Java8中Lambda表达式使用和Stream API的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java8具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

Java-8新特性:学习如何使用Lambda表达式(二)

作者:享学课堂Peter老师 转载请声明出处! 上篇文章讲到需要功能接口的对象,就可以使用lambda表达式。接下来我接着讲方法和构造函数的参考,可变范围等相关内容。 方法参考 有时你已经有了一个适合你需求的方法,你想将它传递给其他一些方案。例如,假设您希望在单击按钮时只打印事件对象。你可以这样写 button.setOnAction(event -> System.out.println(event)); 将println方法传递给setOnAction方法更直观。以下示例显示了它: butt.

m0_57081438的博客 253

电子发票二维码背后的秘密:10分钟看懂校验码、加密字符含义与防伪设计

本文深入解析电子发票二维码的结构与防伪设计,揭示校验码和加密字符的生成原理及验证方法。通过实际案例和技术细节,帮助财务人员理解电子发票的安全机制,提升防伪识别能力,确保税务合规。

weixin_29248611的博客 533

Java8 集合接口中新增的方法

Java8 集合接口中新增的方法

qq_52835003的博客 573

实战指南:用Python实现ONVIF WS-Discovery设备发现(附完整代码)

本文提供了一份详细的实战指南,介绍如何使用Python实现基于ONVIF标准的WS-Discovery设备发现协议。文章深入解析了协议原理、网络通信模型,并提供了完整的代码实现,帮助开发者快速构建智能安防和物联网应用中的设备自动发现工具,有效提升网络设备集成与管理的效率。

chair的专栏 1115

全志A133的AndroidSDK

本小节来学习如何下载全志安卓SDK,SDK的目录,编译和烧录提示:以下是本篇文章正文内容,下面案例可供参考以上就是整个SDK的目录和编译烧录,目的在于让初学者快速了解整个源码的目录和编译出镜像喜欢就订阅吧。

qq_24093081的博客 4056

Java学习笔记一Java集合概述

Java集合就像一种容器,可以把多个对象(实际上是对象的引用)丢进该容器中。在Java 6之前,Java集合会丢失容器中所有对象的数据类型,把所有对象都当成Object类型处理;从Java 5增加了泛型以后,Java集合可以记住容器中对象的数据类型。所有的集合类都位于java.util包下,为了处理多线程环境下的并发安全问题,Java 5还在java.util.concurrent包下提供了一些多...

肥叔菌的博客 8856

倒立摆的PLC控制(模型分析+ SCL源代码)

首先简单介绍下倒立摆模型,下面这幅图是MATLAB网站上的倒立摆模型,下面我们利用牛顿第二运动定律建立摆杆的运动方程。

RXXW_Dor的博客 3336

深入解析Java8核心新特性(Lambda、函数式接口、Stream)

Java8是Java发展中重大的一次版本更新,今天带大家深入解析其中三大核心特性:Lamda、函数式接口、Stream

qq_43947876的博客 902

手把手教你完成基于matlab的LSTM时间序列分析

时间序列是按时间顺序组织的数字序列,是数据分析中重要的处理对象之一。时间序列的主要特点是数据获取方式一般具有客观性,能反映某种现象的变化趋势或统计指标,进而预测未来走向,这在本质上也是一个回归预测的问题。长短时记忆网络(Long Short-Term Memory,LSTM)是一种循环神经网络,适合处理有更长时间跨度的内部记忆,被广泛应用于时间序列分析,能够保持数据的内在持续性,反映数据的细粒度走势,具有良好的预测效果。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 897

OV5645摄像头原理图设计,已量产

在嵌入式视觉项目里,摄像头小板真正决定量产稳定性的,往往不是把传感器接出来这件事本身,而是电源域有没有拆清、参考时钟够不够干净、主板调试时有没有留出可落地的接口。ATK-MC5645 这张原理图的价值,就在于它没有把 OV5645 裸接到一排连接器上,而是把 AFVDD_2V8、DOVDD_1V8、DVDD_1V5、24MHz 时钟和 MIPI/控制信号都收敛在一块独立模组上。

不脱发的程序猿 336

Java的lambda实战(二)集合中的lambda

背景 上一篇文章已经讲了lambda基础,这一章讲在coding中最常用到lambda的场景。

Neo的专栏 375

热力学仿真软件:Fluent_(13).燃烧与化学反应仿真

燃烧模型在热力学仿真软件中扮演着至关重要的角色。Fluent 提供了多种燃烧模型,包括层流预混燃烧模型、湍流预混燃烧模型、非预混燃烧模型、部分预混燃烧模型等。这些模型可以帮助用户模拟不同的燃烧过程,从而更好地理解燃烧现象和优化燃烧系统设计。

kkchenjj的博客 1253

Java 8新特性简介(二)Stream API

简介: Java8中有两大最为重要的改变。第一个是 Lambda 表达式;另外一个则是 Stream API(java.util.stream.*)。 作用: Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。 使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。 一

qq_43050077的博客 225

2022中山大学计算机技术专硕考研初试、复试经验帖

个人简介 推荐几个我自己感觉对考研非常有帮助的小助手吧。可以帮助节省时间! 考研时间规划总览 初试篇 数学 英语 政治 408 复试篇 机试 笔试 面试 关于选导师 个人感言

zik的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JAVA基础核心-集合(上)-collection集合体系

什么是集合,collection集合的体系JCF及集合的实例化应用一.集合1.什么是集合2.泛型3.lambda表达式二.collection集合的体系图三.collection集合体系的实例化应用1.List集合1.1List集合-动态数组ArrayList1.2List集合-链表实现LinkedList1.3List集合-栈实现stack2.队列queue2.1Deque双向队列3.set集合 一.集合 1.什么是集合 1.Java集合类存放在java.util包中,是一个用来存放对象的容器(集合可以存

m0_56688298的博客 1196

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

lambda表达式

一、函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西)。简单来说,函数式接口是只包含一个方法的接口。比如Java标准库中的java.lang.Runnable和 java.util.Comparator都是典型的函数式接口。 java 8提供 @FunctionalInterface作为注解,这个注解是非必须的,只要接口符合函数式接口的标准(即只包含一个方法的接口),虚拟机会自动判断, 但 最好在接口上使用注解@FunctionalInterface进行声明

qq_43398368的博客 283

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java Lambda 表达式的各种形态和使用场景,看这篇就够了

今天这篇文章把 Lambda 表达式的知识梳理的了一遍,相信看完了这里的内容,再看到 Lambda 表达式的各种形态就不觉得迷惑了,虽然今天的文章看起来有点枯燥,不过是接下来 咱们系统学习 Stream 操作的基础,以及后面介绍 Java 中提供的几个函数式编程 interface 也会用到 Lambda 里的知识,后面的内容可以继续期待一下。

Q54665642ljf的博客 338

java8新特性(lambda)

一、函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西)。简单来说,函数式接口是只包含一个方法的接口。比如Java标准库中的java.lang.Runnable和 java.util.Comparator都是典型的函数式接口。 java 8提供 @FunctionalInterface作为注解,这个注解是非必须的,只要接口符合函数式接口的标准(即只包含一个方法的接口),虚拟机会自动判断, 但 最好在接口上使用注解@FunctionalInterface进..

qq_46209794的博客 296

Java基础:集合框架与Stream流

本文是一份Java集合框架学习笔记,系统梳理了核心容器类及其使用方式。内容首先区分了单列集合Collection(含List与Set)与双列集合Map的特性:List有序可重复有索引(如ArrayList基于数组),Set无序不重复无索引(如HashSet基于哈希表)。接着详述了集合的常用增删改查方法及三种遍历方式(迭代器、增强for、Lambda表达式),并指出了并发修改异常的成因与规避方案。最后介绍了Stream流对集合数据的过滤、映射、收集等函数式操作,以及Collections工具类的批量处理与排序

2502_92847486的博客 664

Java中的Lambda表达式和Stream API详解

本文将详细解析Lambda表达式和Stream API的使用方法,并结合实际示例展示它们如何改变传统的编程方式。

YT的博客 1970
上一篇: Java 8新特性之--lambda表达式的使用和应用
下一篇: Java 8新特性之-- Date-Time API(LocalDate/Time/DateTime 日期时间API)
小流至江河
博客等级 码龄9年 223粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值