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表达式与函数接口的关系以及使用案例的更多相关文章

  1. 还看不懂同事的代码?Lambda 表达式、函数接口了解一下

    当前时间:2019年 11月 11日,距离 JDK 14 发布时间(2020年3月17日)还有多少天? // 距离JDK 14 发布还有多少天? LocalDate jdk14 = LocalDate ...

  2. [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

    函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...

  3. java8函数式接口详解、函数接口详解、lambda表达式匿名函数、方法引用使用含义、函数式接口实例、如何定义函数式接口

    函数式接口详细定义 函数式接口只有一个抽象方法 由于default方法有一个实现,所以他们不是抽象的. 如果一个接口定义了一个抽象方法,而他恰好覆盖了Object的public方法,仍旧不算做接口的抽 ...

  4. 009-jdk1.8版本新特性一-展方法,Lambda表达式,函数式接口、方法引用构造引用

    一.JDK1.8 名称:Spider(蜘蛛) 发布日期:2014-03-18 新特性: 1.1.扩展方法[接口的默认方法] Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 defaul ...

  5. 委托学习过程及委托、Lambda表达式和匿名方法的关系总结及事件总结

    第一章,当开始学习委托的时候,我们会问什么是委托?为什么要学习委托? 一,什么是委托? 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法, ...

  6. Lambda表达式和函数试接口的最佳实践 · LiangYongrui's Studio

    1.概述 本文主要深入研究java 8中的函数式接口和Lambda表达式,并介绍最佳实践. 2.使用标准的函数式接口 包java.util.function中的函数是接口已经可以满足大部分的java开 ...

  7. Lambda表达式和函数式接口

    写在有道笔记中,链接地址.欢迎各位看官提出意见交流讨论 http://note.youdao.com/noteshare?id=147109f1bf7f3ae97c43d77891e6ebc8 Lam ...

  8. Java8 Lambda表达式、函数式接口和方法引用

    目录 Java8 Lambda表达式和函数式接口 Lambda表达式 Lambda的使用 函数式接口FunctionalInterface Java内置四大核心函数式接口 方法引用 构造器引用 Jav ...

  9. Lambda表达式与函数式接口

    Lambda表达式的类型,也被称为目标类型(targer type),Lambda表达式的目标类型必须是"函数式接口(functional interface)".函数式接口代表只 ...

随机推荐

  1. 从零开始的全栈工程师——js篇2.10(对象与构造函数)

    对象与构造函数 一.js数据类型 基本数据类型:string   undefined   null  boolean  number 引用数据类型  Object  array  function 二 ...

  2. 使用random函数实现randint函数的功能

    首先说明一下 random函数是random模块中的一个函数 首先要导入random模块 import random random函数的功能 #生成某一范围(0-1)内的随机小数print(rando ...

  3. aapt.exe finished with non-zero exit value 1

    在一个APP 中导入 严振杰的 ALBUM,出现错误 在网上找了各种,最后在 stackoverflow上找到这样的说法: -Go to File->project structure-> ...

  4. app开发,H5+CSS3页面布局小tips

    1.inline-block使用后带来的间隔影响 2.竖线的处理 3.ssh公匙 4.星星组件的巧妙用法 5.api.js的$api对象与 安卓原生引擎的api对象,均相当于jQuery的$对象 6. ...

  5. vue指令总结(二)

    一.vue指令 1.v-text v-text是用于操作纯文本,它会替代显示对应的数据对象上的值.当绑定的数据对象上的值发生改变,插值处的内容也会随之更新.注意:此处为单向绑定,数据对象上的值改变,插 ...

  6. c++ STL list容器成员函数

    list是一个双链表. 函数 描述 void l.assign (int n, const val) void l.assign (it first, it last) 将链表l初始化为n个相同的va ...

  7. fpga 状态机 检测1011序列

    1011 可以使用4个状态:s0,s1,s2,s3. 即:(1)s0有0或1两个状态,当s0位0时,进入s0状态,自身打圈.为1那么进入下个状态s1来检测0. (2)s1有0或1两种情况,s1为1时s ...

  8. IOS 响应者链条 and UIGestureRecognizer 手势识别器)

    一次完整的触摸事件的传递响应的过程 UIAppliction --> UIWiondw -->递归找到最适合处理事件的控件 控件调用touches方法-->判断是否实现touches ...

  9. IOS 创建一个可以随意拉伸不变形的图片

    创建一个扩展 UIImage的类 #import "UIImage_Extension.h" @implementation UIImage+Extension /** *返回一张 ...

  10. NFS服务器实现文件共享

    NFS服务器运行原理 实战配置NFS服务器 配置Samba服务器及实现文件共享 (一)NFS器服务端描述 NFS服务器: Network File System,网络文件系统使FreeBSD支持的一种 ...