lambda表达式与函数接口的关系以及使用案例
lambda表达式与函数式接口是结合使用的。
函数式接口:接口中只有一个抽象方法的接口,其中可以包括default修饰,static 修饰的实例方法。函数式接口可以在接口上添加@FuncationInterface注解(也可以不加),实现方式可以与普通接口一样,通过定义一个实现类实现该接口,也可以通过匿名类形式实现,新增的实现方式通过lambda表达式。
lambda表达式可以理解为:对函数式接口和其中抽象方法的实现。当需要一个函数式接口参数的方法时,我们就可以给其传递一个对应的lambda表表达式作为参数,执行时会自动执行函数式接口中的唯一方法,也就是传递过去的lambda表达式。
函数式接口例如:Comparator接口
import java.util.Arrays;
import java.util.Comparator;
import java.util.List; public class Java8Test1 { public static void main(String[] args) { /**
* 传统实现方式
*/
String [] str = {"a","v","n","r"};
List<String> asList = Arrays.asList(str);
System.out.println("初始状态:"+asList);
asList.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2);
}
});
System.out.println("传统方式:"+asList);
/**
* 采用lambda表达式方式 方式一
*/
String [] str1 = {"a","v","n","r"};
List<String> list = Arrays.asList(str);
//lambda表达式对compartor函数数式接口实现
Comparator<String> comparator = (String o1,String o2)->(o1.compareTo(o2));
list.sort(comparator);
System.out.println("lambda表达式返回值:"+list);
/**
* 采用lambda表达式 方式二
*/
String [] str2 = {"a","v","n","r"};
List<String> list1 = Arrays.asList(str);
//将lambda表达式作为参数传递
list1.sort((String o1,String o2)->(o1.compareTo(o2)));
System.out.println("lambda表达式直接作为参数:"+list1); }
}
运行结果:
初始状态:[a, v, n, r]
传统方式:[a, n, r, v]
lambda表达式返回值:[a, n, r, v]
lambda表达式直接作为参数:[a, n, r, v]
实现两个学生对象按照成绩排序实现方式
定义一个学生类
package cn.sanchuanmu.pojo;
public class Student {
private String name;
private int age;
private double socre;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSocre() {
return socre;
}
public void setSocre(double socre) {
this.socre = socre;
}
}
方式一:采用传统方式实现
package cn.sanchuanmu.sort; import java.util.ArrayList;
import java.util.Comparator;
import java.util.List; import cn.sanchuanmu.pojo.Student; public class DemoSort { /**
* 实现对两个student对象的成绩进行排序
* @param args
*/
public static void main(String[] args) { Student student1 = new Student();
student1.setName("张三");
student1.setAge(23);
student1.setSocre(16.66); Student student2 = new Student();
student2.setName("李四");
student2.setAge(24);
student2.setSocre(24); Student student3 = new Student();
student3.setName("张三");
student3.setAge(23);
student3.setSocre(20); ArrayList<Student> list = new ArrayList<Student>();
list.add(student1);
list.add(student2);
list.add(student3);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getName()+list.get(i).getSocre());
} System.out.println("-------------------------排序之前----------------------------");
getSortBySocre(list); //传统方式实现 for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getName()+list.get(i).getSocre());
} } public static void getSortBySocre(ArrayList<Student> list) {
// TODO Auto-generated method stub
list.sort(new Comparator<Student>() { @Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub return (int) (o1.getSocre()-o2.getSocre());
}
});
} }
方式二:采用lambda表达式方式实现
package cn.sanchuanmu.sort; import java.util.ArrayList;
import java.util.Comparator;
import java.util.List; import cn.sanchuanmu.pojo.Student; public class DemoSort { /**
* 实现对两个student对象的成绩进行排序
* @param args
*/
public static void main(String[] args) { Student student1 = new Student();
student1.setName("张三");
student1.setAge(23);
student1.setSocre(16.66); Student student2 = new Student();
student2.setName("李四");
student2.setAge(24);
student2.setSocre(24); Student student3 = new Student();
student3.setName("张三");
student3.setAge(23);
student3.setSocre(20); ArrayList<Student> list = new ArrayList<Student>();
list.add(student1);
list.add(student2);
list.add(student3);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getName()+list.get(i).getSocre());
} System.out.println("-------------------------排序之前----------------------------"); getLamdaSort(list);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getName()+list.get(i).getSocre());
} } public static void getLamdaSort(List<Student> list){ Comparator<Student> comparator = (Student o1,Student o2)->{return (int) (o1.getSocre()-o2.getSocre());}; list.sort(comparator);
}
}
lambda表达式与函数接口的关系以及使用案例的更多相关文章
- 还看不懂同事的代码?Lambda 表达式、函数接口了解一下
当前时间:2019年 11月 11日,距离 JDK 14 发布时间(2020年3月17日)还有多少天? // 距离JDK 14 发布还有多少天? LocalDate jdk14 = LocalDate ...
- [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口
函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...
- java8函数式接口详解、函数接口详解、lambda表达式匿名函数、方法引用使用含义、函数式接口实例、如何定义函数式接口
函数式接口详细定义 函数式接口只有一个抽象方法 由于default方法有一个实现,所以他们不是抽象的. 如果一个接口定义了一个抽象方法,而他恰好覆盖了Object的public方法,仍旧不算做接口的抽 ...
- 009-jdk1.8版本新特性一-展方法,Lambda表达式,函数式接口、方法引用构造引用
一.JDK1.8 名称:Spider(蜘蛛) 发布日期:2014-03-18 新特性: 1.1.扩展方法[接口的默认方法] Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 defaul ...
- 委托学习过程及委托、Lambda表达式和匿名方法的关系总结及事件总结
第一章,当开始学习委托的时候,我们会问什么是委托?为什么要学习委托? 一,什么是委托? 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法, ...
- Lambda表达式和函数试接口的最佳实践 · LiangYongrui's Studio
1.概述 本文主要深入研究java 8中的函数式接口和Lambda表达式,并介绍最佳实践. 2.使用标准的函数式接口 包java.util.function中的函数是接口已经可以满足大部分的java开 ...
- Lambda表达式和函数式接口
写在有道笔记中,链接地址.欢迎各位看官提出意见交流讨论 http://note.youdao.com/noteshare?id=147109f1bf7f3ae97c43d77891e6ebc8 Lam ...
- Java8 Lambda表达式、函数式接口和方法引用
目录 Java8 Lambda表达式和函数式接口 Lambda表达式 Lambda的使用 函数式接口FunctionalInterface Java内置四大核心函数式接口 方法引用 构造器引用 Jav ...
- Lambda表达式与函数式接口
Lambda表达式的类型,也被称为目标类型(targer type),Lambda表达式的目标类型必须是"函数式接口(functional interface)".函数式接口代表只 ...
随机推荐
- JSP的使用
JSP全称为(Java server page),之所以出现JSP,最主要的目的是抽离出Servlet中输出HTML的部分,由于之前响应客户端的时候,是直接在Servlet中利用response.ge ...
- js中函数声明先提升还是变量先提升
根据官方书籍<你不知道的javascript>(上卷)中写道: "函数会首先被提升,然后才是变量". 例子: console.log(foo); function fo ...
- Android接入支付宝支付实现
接上篇android接入微信支付文章,这篇我们带你来接入支付宝支付服务 简介 首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~ 当然还是老规矩啦,上来肯定的贴上官网地址, ...
- 入口类和@SpringBootApplication
SpringBoot通常有一个名为*Application的入口类,入口类里有一个标准的Java应用的入口方法,main方法,在该方法中使用SpringApplication.run(xxxxxApp ...
- zabbix文档3.4
zabbix 文档 3.4 5.zabbix 快速入门 1 登录和配置用户 用户名 : Admin 密 码 : zabbix 防止暴力袭击 在连续五次失败登录尝试的情况下,Zabbix界面将暂停30秒 ...
- amap -bq 192.168.5.9 80 3306
amap -bq 192.168.5.9 80 3306 查看运行在指定端口上运行的服务
- GitLab-CE-8.9.4 (OpenLogic CentOS 7.2)
平台: CentOS 类型: 虚拟机镜像 软件包: gitlab-8.9.4 bug tracking collaboration commercial development devops git ...
- 美国移民局的I797表原件和I129表是什么呢
I-129表,Petition for a Non-immigrant Worker,即非移民工作许可申请表I797 表 ,Original L1-1A approval notice L1签证批准通 ...
- adc verilog spi 时序
我用的是adc081sd芯片,(由于我们使用的是FPGA不用像单片机那样考虑极性cpol,相位cpha,下面仅仅介绍下跟单片机比较下) 什么是cpol:若cs被拉为低电平时sclk(时钟)是高那么cp ...
- JQuery笔录
1.jQuery 的 hide() 函数,隐藏了 HTML 文档中所有的 <p> 元素.<script type="text/javascript">$(d ...