java 龙卷风_java8-lamba表达式的使用-遁地龙卷风
(-1)前言
学习lamba表达式是十分重要的,你会发现java变的可爱多了。
(0)函数式接口
只有一个方法的接口称为函数式接口
JButton jButton = new JButton("123");
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {}});
等同于
jButton.addActionListener(e->System.out.println("Hello world"));
jButton.addActionListener((e)->System.out.println("Hello world"));
jButton.addActionListener((ActionEvent e)->System.out.println("Hello world"));
jButton.addActionListener((ActionEvent e)->{System.out.println("Hello world");return;});
a.规则
A->B
A 部分是传入方法的参数
B 部分是函数体
参数类型以及返回类型如果可以通过上下文推断出来可不写
当参数只有一个而且它的类型可以被推导得知时,该参数列表外面的括号可以被省略
当函数体只有一个语句且返回类型可被推导时{}可省略
b.例子
Runnable runnable = ()->System.out.println(sign);
Runnable runnable2 = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub}
};
通过匿名内部类我们知道run方法是不需要参数的
System.out.println(sign) 相当于run方法的方法体
Comparator lol = (x,y)->x-y;
Comparator lol = (x,y)->{System.out.println(x+y);return x-y;};
new Comparator() {
@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return 0;
}
};
通过匿名内部类我们知道compare方法需要两个参数
这时编译通过Comparator中Integer推导出参宿类型及返回类型
c.深入
lamba表达式可被看做函数,java.util.function定义了常用的函数式接口
BiFunction
T 代表第一个参数
U 代表第二个参数
R 代表返回值
这表时T,U,R都需要编译器根据上下文进行类型推导
Consumer 代表e->System.out.println("Hello world")
所以当一个方法需要的是lamba表达式时,参数展现形式是java.util.function中定义的样式
(2)方法引用
方法引用是对Lamba表达式的简化
类名::方法名(对象方法、类方法)
int[] oop = {3,1,2,1};
static void sayHello(Integer name)
{
System.out.println(123);
}
Arrays.stream(oop).forEach(Test::sayHello);
Arrays.stream(oop).forEach(s->Test.sayHello(s));
构造方法引用:Class::new
数组构造方法引用:TypeName[]::new
(3)强制类型转换
有时候编译器通过上下文推导出的返回类型与实际类型不符时需要进类型转换
Stream strings = shapelist.stream().map(s->s.getColor());
s.getColor())
s.getColor()返回的是String
(4)lamba表达式在java对象中的应用
你应该在任何java对象中尝试应用lamba表达式,通则是将这个对象转换成java.util.stream,流有串行并行之分哦!并行流关键字parallelStream
数组 Arrays.stream()
List、Set .stream()
String String.chars
...
java.util.stream提供了许多方法用来操作流中的数据,去试一试吧
java 8英文API,没有找到中文的...
(2)对流整体的操作
比如我们可以求一个流的的总和
int sum = Arrays.stream(oop).sum();
int sum1 = Arrays.stream(oop).reduce(0,(x,y)->x+y);
(3)集合之间的转换
我们可以将ArrayList 转换成ArrayList、Set、HashMap,HashMap甚至是更复杂的
a.map()
该方法是映射的意思(一开始我联想到了HashMap),还有mapToDouble等
b.collect()
collect()接受Collectors类型的参数,用来将流重新汇合,
Collectors是收集器,Collectors.toList(),Collectors.toMap()、Collectors.groupingBy等
c.例子
public class Shape
{
private String color;
public Shape() {
// TODO Auto-generated constructor stub
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Shape(String color)
{
this.color = color;
}
}
ArrayList colorList = new ArrayList(){
{
add("Red");
add("Blue");
add("Yellow");
}
};
List shapeList = colorList.stream().map(Shape::new).collect(Collectors.toList());
List colos = shpaeList.stream().map(s->s.getColor()).collect(Collectors.toList());
Set colosSet = shpaeList.stream().map(s->s.getColor()).collect(Collectors.toSet());
Map colorMap = colorList.stream().collect(Collectors.toMap(a->a,s->s));
Map shapesMap = shpaeList.stream().collect(Collectors.toMap(s->s.getColor(), s->s));
Eclipse点不出getColor()方法,还以为用法不对...
Map> shapeMapSet = shpaeList.stream().collect(Collectors.groupingBy(s->s.getColor(),Collectors.toSet()));
Map>> shapeMap3 = shpaeList.stream().collect(Collectors.groupingBy(s->s.getColor(),Collectors.groupingBy(s->s.getColor(),Collectors.toList())));
(4)集合本身的操纵
想要改变现有集合而不产生新的集合可以使用
Iterable.forEach(Consumer),Collection.removeAll(Predicate),List.replaceAll(UnaryOperator),List.sort(Comparator)和Map.computeIfAbsent()等
shpaeList.sort(Comparator.comparing(Shape::getColor));
(5)好文推荐
我读了两遍
第三篇没有找到,那位小伙伴提供下!
java 龙卷风_java8-lamba表达式的使用-遁地龙卷风相关推荐
- java代码实现龙卷风_Java-使用二叉树实现快速排序-遁地龙卷风
(-1)写在前面 在一次面试中被问及快速排序,回来后又看了一次以前做过的案例,说来惭愧,时至今日还需要读好长时间,才能明白自己代码的意思,主要是缺少注释和图解,深有感慨,决定好好记录一下. 之所以使用 ...
- java 拉姆表达式_Java8 lambda表达式10个示例
Java 8 lambda表达式示例 转自importNew 原文链接 例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现R ...
- java jsp 脚本 声明 表达式 简介
目录 jsp脚本 jsp声明 jsp表达式 jsp脚本 在<%%>中包含可执行的Java代码 <% Java代码 %> <%@ page language="j ...
- java override格式_Lambda表达式告别@override
引言 什么是Lambda呢?你肯定想到了数学符号中的那个"入"形状的符号吧?它可不是数学界的专利,在java中也有哦,本文针对Android开发中的Lambda表达式,详细介绍并且 ...
- jquery toggle方法使用出错?请看这里-遁地龙卷风
这个函数在1.9之前和1.9之后的用法大不相同 1 1.9之间,用于点击元素时函数的轮流执行 toggle(function(){alert(1);//1,3,5,7...},function(){a ...
- java 代码执行el,专属于java的漏洞——EL表达式注入
前言"FSRC经验分享"系列文章,旨在分享焦点科技信息安全部工作过程中的经验总结,包括但不限于漏洞分析.运营技巧.sdl推行.等保合规.自研工具等等. 欢迎各位安全从业者持续关注~ ...
- java junit 异常_JUnit:使用Java 8和Lambda表达式测试异常
java junit 异常 在JUnit中,有许多方法可以在测试代码中测试异常,包括try-catch idiom JUnit @Rule和catch-exception库. 从Java 8开始,我们 ...
- 带有Java 8,lambda表达式和Mockito-Java8附加组件的更紧凑的Mockito
Mockito-Java8是一组Mockito附加组件,它们利用Java 8和lambda表达式使Mockito的模拟更加紧凑. 在2015年初,我进行了简短的演讲, Java 8为测试带来了力量! ...
- JUnit:使用Java 8和Lambda表达式测试异常
在JUnit中,有许多方法可以在测试代码中测试异常,包括try-catch idiom JUnit @Rule和catch-exception库. 从Java 8开始,我们还有另一种处理异常的方法:使 ...
最新文章
- 【青少年编程】【三级】克隆猫游戏
- .NET chart 毫秒级坐标轴
- elasticsearch入门hello world (macos)【一】下载运行
- Java 图形用户界面(GUI)java.awt包概述
- MyEclipse使用总结——MyEclipse文件查找技巧
- codis集群部署实战
- [开源] FreeSql.Tools Razor 生成器
- linux 下tomcat服务每天定时启动
- Android Studio安装问题及填坑
- 清理神器CleanMyMac X 空间透镜——可视化您的磁盘空间
- AI学习笔记(五)坐标变换与视觉测量
- Java-HashMap实现原理
- Eclipse的自动编译和手动编译
- Atitit.js javascript的rpc框架选型
- 计算机导论知识体系,《计算机导论》课程知识体系结构研究
- LabVIEW编程LabVIEW开发在LabVIEW中复用现有代码
- Redis持久化 - 邱乘屹的个人技术博客
- 大学生数学竞赛试题荟萃
- html5 拖拽 编辑 插件,超给力 Vue.js 可视化H5拖拽编辑器Quark-H5
- “领导喊你去办公室”电信诈骗现沪 专骗公务员
热门文章
- 数格子算面积的方法_“数方格”是笨方法吗?
- 高级转录组调控分析和R语言数据可视化第十三期 (线上线下同时开课)
- 支付宝支付成功之后的接口_继支付宝微信之后,51信用卡还款也开始收费了,手续费再创新高...
- 微信热搜榜、订阅热词API
- Elasticsearch:Ingest Pipeline 实践
- 博物馆场馆智能化展览展示解决方案
- S7-PLCSIM与WINCC 通讯【工控老鬼】
- iOS开发实用技术之音频播放(QQ音乐)
- 通用键盘鼠标模拟(包括USB和PS2)
- 【OpenCV 例程300篇】40. 图像分段线性灰度变换