JAVA 8 StreamAPI 和 lambda表达式 总结(一)--lambda表达式

这些天看见另一本好书《给大忙人看的Java SE 8》,其中的新特性 StreamAPI 和 lambda表达式 是之前jdk没有提供的新特性,也是jdk8 重要的更新内容,我会总结一下它们的用法,更详细的参见书本。

  1. lambda表达式的概念
    人对一个概念的理解是随着时间渐渐加深的,之前也见过lambda表达式,但那时候学起来完全摸不到头脑,这两天重新去看,终于有了一些概念,可以想象,过段时间会更加知道为什么会有lambda表达式,大牛们为什么会去设计这种函数式语言?

java里大家都知道匿名函数,下面是一个多线程的创建例子:

package JDK;/*** Created by panqian on 2017/2/20.*/
public class Lambda_1 {public static void main(String[] args) {//传统创建线程new Thread(new Runnable() {@Overridepublic void run() {System.out.println("传统创建线程");}}).start();//使用lambda表达式new Thread(()->{System.out.println("lambda表达式");}).start();}
}

 

同样是传入Runnable实现类,lambda表达式的写法比传统的更加简洁。再看一个集合排序
 List<Integer> list = new ArrayList<>();list.add(3);list.add(1);list.add(2);System.out.println("排序前: " + list.toString());Collections.sort(list, (Integer x, Integer y) -> {return x > y ? 1 : -1;});System.out.println("排序后: " + list.toString());

 

可以看出 lambda表达式由 参数((Integer x, Integer y)),剪头(->),代码块({
return x > y ? 1 : -1; })组成。 lambda表达式很大的一个使用场景就是替代java的内部类,做到代码简洁,易读。

2.方法引用
对于上面的代码还不是最简洁的,如果在lambda表达式中引用别的方法,可以拿lambda表达式里面的方法引用:

拿前面集合排序的例子继续简化:

List<Integer> list1 = new ArrayList<>();
list1.add(3);
list1.add(1);
list1.add(2);System.out.println("排序前: " + list1.toString());//::前面是类,后面是方法,压缩到只有一句,等同于 
//
//  (Integer x, Integer y) -> {
//      return Integer.compare(x,y);
//  }
list1.sort(Integer::compare);System.out.println("排序前: " + list1.toString());

 

可以看出它由

对象::实例方法
类::静态方法

格式组成

Integer::compare这个表达式没有参数,它会根据上下文自动判断应该传入什么参数,达到排序的目的。

未完待续

转载于:https://www.cnblogs.com/lovejj1994/p/7182158.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Pytorch神经网络理论篇】 14 过拟合问题的优化技巧(一):基本概念+正则化+数据增大

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

MTK 8127平台使用busybox

一、什么是BusyBox &#xff1f; BusyBox 是标准 Linux 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具&#xff0c;例如 cat 和 echo&#xff0c;还包含了一些更大、更复杂的工具&#xff0c;例如 grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具…

MediaPlayer 播放视频的方法

MediaPlayer mediaPlayer new MediaPlayer(); mediaPlayer.reset();//重置为初始状态 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDisplay(surfaceView.getHolder());//设置画面显示为surfaceView mediaPlayer.setDataSource("/mnt/sdc…

Android bootchart分析

1.首先确保编译的init被烧录到板子里面去了,源码的位置在system/core/init/ 2.第一次修改后,编译了system/core/init/然后又编译了./mkkernel 生成boot.img 但是烧录进去还是不成功 3.然后 发现有一个宏没有设置 在bootchart.h里面,BOOTCHART 修改后重新编译,烧了所有…

【Pytorch神经网络理论篇】 15 过拟合问题的优化技巧(二):Dropout()方法

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

bzoj2435: [Noi2011]道路修建 树上dp

点击打开链接 RE了一辈子... 思路&#xff1a;树上dp&#xff0c;直接dfs找到每个点v的子节点有多少&#xff0c; 那么对答案的贡献是 w*abs((n-size[v])-size[v]); RE代码&#xff1a; 1 #include <bits/stdc.h>2 using namespace std;3 typedef long long ll;4 const i…

android之APP模块编译

原文地址&#xff1a;http://blog.csdn.net/yaphet__s/article/details/45640627 一&#xff0c;如何把app编进系统 a.源码编译&#xff0c;在packages/apps目录下有安卓原生的app&#xff0c;以Bluetooth为例&#xff0c;源码根目录下有Android.mk文件&#xff1a; packages\a…

【Pytorch神经网络理论篇】 16 过拟合问题的优化技巧(三):批量归一化

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

【Pytorch神经网络理论篇】 17 循环神经网络结构:概述+BP算法+BPTT算法

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

Android 闹钟

需求&#xff1a;新的平台要实现关机启动&#xff0c;所以要了解一下闹钟的机制 这个链接写得比较详细&#xff08;我只是动手试了试&#xff0c;毕竟应用不是专长&#xff09;&#xff1a;http://www.cnblogs.com/mengdd/p/3819806.html &#xff11;、AlarmManager 这个是…

【Pytorch神经网络理论篇】 18 循环神经网络结构:LSTM结构+双向RNN结构

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

DWR之初尝

---恢复内容开始--- 准备公工作 1.去官网下载jar和war 开发工具 eclipse 开始开发:gogogo 1:建立一个可以跑起来的javaweb项目,最基本的就可以了. 2:导入commons-logging-1.0.4.jar,dwr.jar 3:在web.xml里配置一下 <?xml version"1.0" encoding"UTF-8"…

jni调试

&#xff11;&#xff12;年的时候写过&#xff2a;&#xff2e;&#xff29;但是又忘记得差不多了&#xff0c;现在重新写了一次&#xff0c;发现碰到了几个问题&#xff0c;写下来记录一下 第一步 应用程序java代码 package com.example.helloworld;import java.util.Calend…

【Pytorch神经网络理论篇】 19 循环神经网络训练语言模型:语言模型概述+NLP多项式概述

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

B. Code For 1 一个类似于线段树的东西

http://codeforces.com/contest/768/problem/B 我的做法是&#xff0c;观察到&#xff0c;只有是x % 2的情况下&#xff0c;才有可能出现0 其他的&#xff0c;都是1来的&#xff0c;所以开始的ans应该是R - L 1 那么现在就是要看那些是x % 2的&#xff0c;然后放在的位置是属于…

解码错误。‘gb2312‘ codec can‘t decode byte 0xf3 in position 307307: illegal multibyte sequence

一般在decode加errors"ignore"就可以了。例如&#xff1a; decode(gb2312,errors ignore)

常见排序算法的C#实现

排序算法常见的有直接排序、冒泡排序、快速排序、基数排序、归并排序等&#xff0c;下面是实现的代码&#xff0c;仅供参考。 #region DirectSort/// <summary>/// 直接排序./// 第一次从R[0]~R[n-1]中选取最小值&#xff0c;与R[0]交换&#xff0c;/// 第二次从R[1]~R[n…

Android RTC 自下往上浅析

1.首先搞清楚RTC在kernel内的作用: linux系统有两个时钟&#xff1a;一个是由主板电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟&#xff0c;硬件时钟。当操作系统关机的时候&#xff0c;用这个来记录时间&#xff0c;但是对于运行的系统是不用这个时间的。 另一个时间…

【Pytorch神经网络实战案例】11 循环神经网络结构训练语言模型并进行简单预测

1 语言模型步骤 简单概述&#xff1a;根据输入内容&#xff0c;继续输出后面的句子。 1.1 根据需求拆分任务 (1)先对模型输入一段文字&#xff0c;令模型输出之后的一个文字。(2)将模型预测出来的文字当成输入&#xff0c;再放到模型里&#xff0c;使模型预测出下一个文字&…