Java8集合中的Lambda表达式

本文翻译自《Java 8 Explained: Applying Lambdas to Java Collections》。

Lambdas表达式是Java 8的主题,在Java平台上我们期待了很久。但是,如果如果我们不在集合中使用它的话,就损失了很大价值。把现有接口迁移成为lambda风格接口的问题已经通过default methods,也就是defender methods解决了。在这篇文章里面我们来看一看Java集合里面的批量数据操作(bulk operation)。

批量操作

最初的变更文档已经说了,批量操作是“给Java集合框架添加的用以批量操作数据的功能,而它是基于lambda函数实现的”。引用的话也就是在说,lambda移植到Java 8对我来说的实际目的,就是它提供了一种新的使用集合的方式,这也是最重要的特性,表达式操作符可以并行执行,并且lambda是一个比常规表达式操作符更好的工具。

内部和外部的迭代

历史上,Java集合是不能够表达内部迭代的,而只提供了一种外部迭代的方式,也就是for或者while循环。要描述内部迭代,我们需要用到LambdaJ这样的类库:

 

1
2
List persons = asList( new Person( "Joe" ), new Person( "Jim" ), new Person( "John" ));
forEach(persons).setLastName( "Doe" );

 

从上面的例子可以看出,我们不需要关心last name是怎么被设置到每一个person对象里面去的,也许这样的行为是支持并发执行的。现在我们可以在Java 8中使用类似的表达了:

 

1
persons.forEach(p -> p.setLastName( "Doe" ))

 

内部迭代其实和集合的批量操作并没有密切的联系,这只是一个小小的特性,借助它我们感受到语法表达上的变化。真正有意思的和批量操作相关的是新的流(stream)API。

流API

新的java.util.stream包已经添加进JDK了,现在我们可以借助Java 8执行filter/map/reduce风格的操作了。

流API允许我们声明对数据进行串行或者并行的操作:

 

1
2
3
List persons = …   // sequential version
Stream stream = persons.stream();   //parallel version
Stream parallelStream = persons.parallelStream();

 

java.util.stream.Stream接口提供了批量数据操作的入口,取得了对流实例的引用,我们就可以对集合执行如下有趣的任务了:

Filter

在数据流中实现过滤功能是首先我们可以想到的最自然的操作了。Stream接口暴露了一个filter方法,它可以接受表示操作的Predicate实现来使用定义了过滤条件的lambda表达式。

 

1
2
List persons = …
Stream personsOver18 = persons.stream().filter(p -> p.getAge() > 18 );

 

Map

假使我们现在过滤了一些数据,比如转换对象的时候。Map操作允许我们执行一个Function的实现(Function<T,R>的泛型T,R分别表示执行输入和执行结果),它接受入参并返回。首先,让我们来看看怎样以匿名内部类的方式来描述它:

 

1
2
3
4
5
6
7
8
Stream students = persons.stream()
       .filter(p -> p.getAge() > 18 )
       .map( new Function() {
                   @Override
                   public Student apply(Person person) {
                      return new Student(person);
                   }
               });

 

现在,把上述例子转换成使用lambda表达式的写法:

 

1
2
3
Stream map = persons.stream()
         .filter(p -> p.getAge() > 18 )
         .map(person -> new Student(person));

 

Lambda在把参数传给map方法的时候,实际却并没有使用这个参数,那么我们就可以写成这样:

 

1
2
3
Stream map = persons.stream()
         .filter(p -> p.getAge() > 18 )
         .map(Student:: new );

 

Collect

“流”抽象天生就该是持续的,我们使用流来描述操作,但是如果我们要获取最终结果的话,必须收集流产生的最终结果。Stream API提供了一系列“最终”的方法,collect()方法就是其中的一个,我们借此可以收集操作的最终结果:

 

1
2
3
4
List students = persons.stream()
         .filter(p -> p.getAge() > 18 )
         .map(Student:: new )
         .collect( new Collector>() { … });

 

幸运的是,大多数情况下你不需要自己实现Collector接口,而是利用Collectors工具类:

 

1
2
3
4
List students = persons.stream()
         .filter(p -> p.getAge() > 18 )
         .map(Student:: new )
         .collect(Collectors.toList());

 

或者,如果我们想使用特定的实现类来收集结果:

 

1
2
3
4
List students = persons.stream()
         .filter(p -> p.getAge() > 18 )
         .map(Student:: new )
         .collect(Collectors.toCollection(ArrayList:: new ));

 

并行和串行

一个使用新的Stream API有趣的特性是它从来都不需要所谓串行或者并行的方法,可以从一开始就并行地消费数据,或者在处理流中的任意时刻转为串行的。

1
2
3
4
5
6
List students = persons.stream()
         .parallel()
         .filter(p -> p.getAge() > 18 )  // filtering will be performed concurrently
         .sequential()
         .map(Student:: new )
         .collect(Collectors.toCollection(ArrayList:: new ));

这里有隐藏的一点是,数据处理的并行部分会自动地自我管理,不需要我们自己来处理并发的问题。

总结

好了,要结束了。新的Stream API和lambda表达式给Java 8带来了很多新的特性。当然,在这篇文章以外还有很多没有谈及到,但愿很快我可以给你带给你更多有趣的特性。

文章系本人原创,转载请保持完整性并注明出自《四火的唠叨》

snipersim安装 snipersim安装记录,便于后续使用tip:snipersim需要在python2的环境下编译。 阅读详情

相关推荐

基于SHIS凝视型短波红外高光谱相机(900-1700nm)区分不同宝石的差异性和可分性(宝石分选)

SHIS系列凝视型高光谱相机基于液晶可调谐滤波器(LCTF),通过电控LCTF进行连续细分窄波段分光,对每个波段进行高分辨率的二维面阵成像,进行图像处理后,获得完整的高光谱高清图像序列。具有低功耗、小型化、使用方便和易于扩展的优势。其工作波段覆盖400nm至1000nm,能够捕捉宝石在不同波长下的光谱特征,为宝石鉴定提供了新的工具。

wayho的博客 710

【Java系列】深入解析 Lambda表达式

Lambda表达式是Java 8中最强大和灵活的新特性之一,它可以用于各种不同的编程任务,使代码更加简单、灵活和易于读写。 Lambda表达式的语法非常简洁,通常由一个参数列表、一个箭头符号和一个表达式主体组成。

颜淡慕潇 6万+

潜流式人工湿地计算_复合人工湿地净化水产养殖污水技术

技术概论1. 定义与分类人工湿地是指用人工筑成水池或沟槽,底面铺设防渗漏隔水层,充填一定深度的基质层,种植水生植物,利用基质、植物、微生物的物理、化学、生物三重协同作用使污水得到净化的系统。当池塘养殖污水进入人工湿地时,其污染物被床体吸附、过滤、分解而达到水质净化作用。按照水体流动方式,人工湿地分为表面流人工湿地、水平潜流人工湿地、垂直潜流人工湿地以及由前面几种湿地混合搭配的组合式人工湿...

weixin_42365490的博客 4249

【Lambda】集合的Lambda表达式

(1)collect(toList()):通过 Stream 生成一个列表(2)map:将流中的一个值转换成一个新的值(3)filter:过滤 Stream 中的元素(4)flatMap:将多个 Stream 连接成一个 Stream(5)max:求最大值(6)min:求最小值(7)reduce:从一组值中生成一个新的值用的是Mybatis-plus的mapper,也可以自己自定义一个List集合。

weixin_44823875的博客 3556

手把手教你用ADS优化肖特基二极管检波电路(附RC参数避坑指南)

本文详细介绍了如何使用ADS软件优化肖特基二极管检波电路,包括RC参数设置、常见失真问题分析与解决方案。通过实战案例和参数优化技巧,帮助射频工程师避免设计陷阱,提升电路性能。特别附有RC参数避坑指南,适用于调幅解调、功率检测等应用场景。

m2n3o4p5的博客 198

【Linux】Petalinux使用QSPI FLASH引导启动

1. 预分配Flash空间使用Flash引导Petalinux做的系统,也有进阶的做法。部分图片和经验来源于网络,若有侵权麻烦联系我删除,主要是做笔记的时候忘记写来源了,做完笔记很久才写博客。1. 预分配Flash空间根据生成的bit文件大小估算BOOT.BIN文件的大小,为Flash大概分配四个分区:boot、bootenv、kernel、bootscr,分别存放BOOT.BIN文件、u-boot的环境变量、内核文件(image.ub/zImage/uImage等)、启动脚本boot.scr。

Tesseract_9527的博客 3375

Java 常用lambda操作集合

lambda

ljz2016的博客 1081

自建 HTML获取腾讯六宫格点选图片验证码素材,实现刷新批量获取图片方便训练

通过自建 HTML 页面,可以方便地获取腾讯六宫格二维码素材,不仅过程简单,而且可以灵活配置各种参数。希望这篇文章能帮助到需要相关素材的小伙伴。如果你有其他问题或者更好的方法,欢迎留言交流!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 489

【Java基础】Java Lambda表达式详解

java8 中引入的 Lambda 表达式真的是个好东西,掌握之后,写代码更简洁了,一起来看看 Lambada 表达式常见的写法,加深理解。

yubao0723的专栏 1万+

CodeBuddy Code CLI 常用工作流:17个实战场景全解析

CodeBuddy Code CLI 17个实战场景解析 本文详细介绍了CodeBuddy Code CLI在17个开发场景中的高效应用,包括: 快速理解新代码库 高效修复Bug 安全重构代码 使用子代理系统处理专业任务 Plan Mode安全分析 自动化测试处理 创建合并请求 文档生成与维护 图片内容分析 文件目录快速引用 每个场景都配有具体命令示例和最佳实践,帮助开发者提升工作效率。

简简单单Onlinezuozuo 1079

SAP S/4 FICO科目辅助余额表开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP S/4 FICO科目辅助余额表开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

我好像病了的博客 329

Lambda表达式

Lambda表达式背景基础语法函数式接口Lambda表达式的基本使用变量的捕获匿名类中的变量捕获Lambda中的变量捕获Lambda在集合当中的使用Lambda的优点和缺点 背景 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式可以看作是一个匿名函数。 基础语法 基本语法: (parameters)

qq_45661125的博客 3832

循迹小车控制实验:代码集成与硬件验证

在main.c文件中还需定义上层代码调用的GPIO输入和PWM输出相关函数,其中调用STM32CubeMX生成的HAL库函数。}else{}else{}else{}else{在main.h文件中的USER CODE BEGIN EFP注释代码段中外部声明Get函数和Set函数,使该函数可以被上层代码调用。循迹小车控制实验到本章全部完成。相比于前几章节的实验,本实验复杂程度是最高的。

u013288925的博客 127

Java8使用lambda表达式进行集合的遍历

我们经常会用到各种集合,数字的,字符串的还有对象的。它们无处不在,哪怕操作集合的代码要能稍微优化一点,都能让代码清晰很多。在这章中,我们探索下如何使用lambda表达式来操作集合。我们用它来遍历集合,把集合转化成新的集合,从集合中删除元素,把集合进行合并。 遍历列表 遍历列表是最基本的一个集合操作,这么多年来,它的操作也发生了一些变化。我们使用一个遍历名字的小例子,从最古老的版本介绍到现在最...

浅蓝色 3168

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java8 lambda表达式对集合的处理

筛选系列 //从数据库查询出的数据 List<ClassImagePraise> pList = classImagePraiseService.list(lambdaQueryWrapperTow); //把该集合里面每个对象的name筛选出来 List<String> name= list.stream().map(p -> p.getName()).collec...

caiye_007的博客 673

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java 8 使用 Lambda 表达式操作集合

Java 8 使用 Lambda 表达式操作集合 遍历集合 // Java 8 新特性,创建集合时初始化。 Java 9 中可以直接使用 List.of("小明", "小花", "小李") List<String> list = Stream.of("小明", "小花", "小李").collect(toList()); // Java 8 之前的写法 for (String name : list) { System.out.println(name); } // Java 8 的

马旭辉博客 1011

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JAVA8 lambda表达式操作集合

JAVA8 lambda表达式操作集合 import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; import org.apache.commons.lang3.builder.ToStringBuilder; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.M

qq_42273232的博客 398

java遍历lambda_Java8的lambda表达式遍历集合

Java8的lambda表达式遍历集合这里简单的forEach循环遍历List和Map。示例package com.cnsyear.demo;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;public class java8Demo {public sta...

weixin_31832681的博客 1850

java8遍历集合_Java8的lambda表达式遍历集合

Java8 lambda 表达式遍历集合遍历List示例List list = new ArrayList() {{add(new Strudent("b", 11, "女"));add(new Strudent("a", 19, "男"));add(new Strudent("d", 15, "女"));add(new Strudent("c", 22, "男"));}};list.stream...

weixin_26750831的博客 632

使用JAVA8Lambda表达式对集合某字段求和

使用JAVA8Lambda表达式对集合某字段求和 Double salesAmount = yearLsit.stream().map(o -> BigDecimal.valueOf(o.getDeliveryAmount()-ArithUtils.add(o.getRebateApplyAmount(), o.getPriceDifferenceApplyAmount()))).

weixin_43858882的博客 1万+

java8 lambda表达式 list_java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合...

java8新特性: lambda表达式:直接获得某个list/array/对象里面的字段集合比如,我有一张表:entityCategory.javaserviceCategoryService.java需求:我想获取CategoryService.fiall()查询出来的数据中的,所有category_type的集合//读取数据List categoryList =CategoryService...

weixin_28868927的博客 1903

Java 8 Lambda 表达式:一行代码搞定集合排序,太香了

Java 8 的Comparator接口新增了一系列静态方法,如comparing()、comparingInt()、comparingDouble()等,这些方法可以直接根据对象的字段生成比较器,结合 Lambda 表达式使用能让代码更简洁。对于 Java 开发者而言,这种 “香” 不仅是语法层面的简洁,更是编程思维的升级 —— 从面向对象的 “怎么做”(编写实现类)转向函数式的 “做什么”(描述比较逻辑),让代码更贴近业务需求本身。例如,对字符串按 “长度优先,首字母其次” 排序:​。

2509_93051135的博客 501

java8 lambda 排序_java8新特性(一)使用Lambda表达式集合比较排序

概述最近开始在手头的项目中用到了一些java8的新特性,用了感觉不错,特分享记录下。Lambda表达式,是java语言层次上的改变,Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码看成数据,一种函数式编程的概念。废话不多说,上代码:在集合比较排序上的应用我们先创建一个简单的实体类:public class Staff {//ID作为唯一标识private Long ...

weixin_26858217的博客 1465

Java8新特性-Lambda表达式对集合的相关操作

Java 8 引入的新特性——Lambda 表达式,结合 forEach 方法可以更方便地实现遍历,相比传统的循环用起来Lambda 的函数式编程更加简洁,能减少不少冗余的代码行数,不过Lambda 表达式读起来会比较生涩,不过熟悉使用时真的香! 常用的场景有很多,下面只讨论Lambda 表达式对集合的相关操作。 先定义一些基础类,用lombok的@Data注解省去get和set这些方法: ...

吖飞 710

Java8的lambda表达式遍历集合

Java8 lambda 表达式遍历集合 遍历List 示例 List&lt;Strudent&gt; list = new ArrayList&lt;Strudent&gt;() {{ add(new Strudent("b", 11, "女")); add(new Strudent("a", 19, "男")); add(

AllenJoe666的博客 1万+

JAVA 8 lambda 表达式实现按某个属性值查找对象集合中符合条件的对象

转载自:https://www.cnblogs.com/lindsayYang/p/9843599.html JAVA 8 lambda 表达式实现按某个属性值查找对象集合中符合条件的对象     当前的需求是从数据库或者其他服务中获取到了一个对象集合,假设对象是Cart购物车,里面有product_id,product_name,count等。   需要从集合中查找商品id是1的商品对象。...

lizhengyu891231的博客 1万+
上一篇: 换个角度思考问题
下一篇: 实际技术选型的考虑因素
RayChase
博客等级 码龄20年 71粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值