博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java8:Lambda表达式
阅读量:5815 次
发布时间:2019-06-18

本文共 2954 字,大约阅读时间需要 9 分钟。

hot3.png

一、相比Java7,Java8的新特性

接口的默认方法
Java 8 允许给接口添加一个非抽象的方法实现,只需要使用default关键字即可,这个特征又叫做扩展方法。

Lambda表达式

函数式接口

方法与构造函数引用

Java类库的新特性
Java 8 通过增加大量新类,扩展已有类的功能的方式来改善对并发编程、函数式编程、日期/时间相关操作以及其他更多方面的支持。

二、Lambda表达式

       lambda是十分常见的编程语言结构,在函数式编程语言(例如Lisp、Haskell)中使用范围极广。

1.lambda表达式的定义

      lambda表达式其实就是没有名称的函数,在Java中可以把它当成一个值。Java不允许脱离类的概念运行方法,所以lambda表达式是在某个类中定义的匿名方法(开发者可能不知道具体是哪个类)。

2.lambda表达式语法

通常以(argument) -> {body}这样的格式书写,argument是参数,body是表达式主体,其中参数类型可以指定,也可以省略,省略的话,编译器可以自己推断出来类型。

(arg1,arg2...) -> {body}             //省略参数类型

(Type1 arg1,Type2 arg2...)->{body}   //指定参数类型
参数可以是零个或多个,多个时在括号中,用逗号分隔

() -> {body}  //零个参数时,用一个空的圆括号表示参数

(arg1) -> {body}  或者  arg1→{body}    //一个参数
(arg1,arg2) -> {body}  //多个参数

body表达式主体可以是零条或多条语句,包含在花括号中,body表达式主体只有一条语句时,花括号可以省略

三、函数式接口(FunctionalInterface)

       函数式接口是Java 8为支持Lambda表达式新发明的。lambda表达式依托于函数接口。

       它的定义:一个接口,如果只有一个显式声明的抽象方法,那么它就是一个函数接口。一般用@FunctionalInterface标注出来(也可以不标)。

@FunctionalInterface

public interface Lambda4Function {
public int add(int x ,int y);
}

四、Lambda4Function接口的使用

public class Lambda4FunctionInterfaceTest {
public static void main(String[] args){
//new一个匿名类对象
Lambda4Function lf1 = new Lambda4Function(){
public int add(int x,int y ){
return  x+y;
}
};
int sum1 = lf1.add(3,4);
System.out.println("旧方式求3+4="+sum1);
//lambda表达式方式,指定参数类型
Lambda4Function lf2 = (int x,int y)->{return x+y;};
int sum2 = lf2.add(5,6);
System.out.println("lambda方式,指定参数类型,求5+6="+sum2);
//lambda表达式方式,不指定参数类型
Lambda4Function lf3 = (x, y)->{return x+y;};
int sum3 = lf3.add(7,8);
System.out.println("lambda方式,不指定参数类型,求7+8="+sum3);
}
}
五、Runnable和Comparator接口的使用
1.Runnale接口,,新建线程

public class Lambda4Runnable {

public static void main(String[] args){
Runnable oldRunnable = new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName() + ": Old Runnable");
}
};
Runnable newRunnable = () -> {
System.out.println(Thread.currentThread().getName() + ": New Lambda Runnable");
};
new Thread(oldRunnable).start();
new Thread(newRunnable).start();
}
}
2.Comparator接口,String数组排序

public class LambdaStudy {

public static void main(String[] args){
String[] oldWay = "Improving code with Lambda expressions in Java 8".split(" ");
//旧方式实现
Arrays.sort(oldWay, new Comparator<String>() {
public int compare(String s1, String s2) {
return s1.toLowerCase().compareTo(s2.toLowerCase());
}
});
System.out.println(String.join(",",oldWay));

//lambda表达式实现

String[] newWay =  "Improving code with Lambda expressions in Java 8".split(" ");
Arrays.sort(newWay,(s1, s2) -> {
return s1.toLowerCase().compareTo(s2.toLowerCase());
});
System.out.println(String.join(",",newWay));
}
}
六、lambda表达式与集合类
public class Lambda4List {
public static void main(String[] args){
List<String> ls = new ArrayList<String>();
ls.add("到餐");
ls.add("外卖");
ls.add("猫眼");
//旧的方式遍历
for(String st: ls){
System.out.println(st);
}
System.out.println("---------分隔符---------");
//lambda方式
ls.forEach(s -> {System.out.println(s);});
}
}
 

转载于:https://my.oschina.net/u/3705388/blog/1826339

你可能感兴趣的文章
24飞机大战_面向对象设计类
查看>>
每天一个linux命令(17):whereis 命令
查看>>
css3新特性
查看>>
当*.sql文档太大是,数据库控制软件不能直接导入时,需要用到数据库控制台的导入sql语言实现...
查看>>
WinForm LED循环显示信息,使用定时器Threading.Timer
查看>>
解决xftp远程连接中文乱码
查看>>
算法学习(3)----求数组中大小最接近的两个元素的差
查看>>
Log4j常用配置及使用
查看>>
gson如何转化json数组
查看>>
spark RDD功能与分类
查看>>
第一周项目个人小结
查看>>
第二周内容总结
查看>>
mssql使用问题大合集
查看>>
20145234黄斐《网络对抗技术》实验六-信息搜集与漏洞扫描
查看>>
一些常见的js编程题
查看>>
ORA-01012: not logged on
查看>>
IntelliJ IDEA 快捷键和设置
查看>>
nodejs中function*、yield和Promise的示例
查看>>
对《技术人员,你拿什么拯救你的生活----温水煮青蛙》的一点看法
查看>>
达拉草201771010105《面向对象程序设计(java)》第十一周学习总结
查看>>