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. hibernate课程 初探单表映射2-4 transaction简介

    1 hibernate是非自动提交.如果transaction不写的话,会只创建表结构而不插入语句.   如果不写transaction而想实现插入的功能的话,需要重写session的dowork方法 ...

  2. C# 连接 postgres失败

    小程序完成了,要发布到客户的服务器上: 我的测试机:win10  64             数据库:PG9.6.5     64 客户服务器:win7    32             数据库: ...

  3. Table中采用JQuery slideToggle效果的问题

    需求:用JQuery实现,点击最上边的粗加号时,对所有含有子表的Tr进行展开,点击 + 号时,只对当前Tr的下一个tr内容的动态隐藏和显示: 问题:JQuery的slideToggle() slide ...

  4. 【Android开发笔记】程序崩溃异常总结

    广播注册相关(broadcastReceiver) 没有注册广播就注销广播 注册广播但未注销广播 注册广播后重复注销广播 解决办法: 添加一个布尔变量,注册广播后为true,若为true在执行注销,注 ...

  5. freebsd开启root远程登陆

    i /etc/ssh/sshd_config 找到: #PermitRootLogin no改在: PermitRootLogin yes

  6. 部署JavaWeb时出现 If a file is locked,you can wait until

    在部署JavaWeb程序时出现了if a file is locked ,you can wait until the lock stop的问题,这个主要是classpath目录出错或者jar包未导入 ...

  7. Copy Failed Error Access to fobidden

    使用SVN的branch/tag命令来切包时,报出了一下错误提示 就这个错误,调了整整一天,如果你也遇到了类似问题,我真心希望下面解决问题的过程能帮助到你:D 解决过程: 1.网上查了很多帖子,发现跟 ...

  8. 从asp.net到jsp:3分钟看透Jsp&Servlet

    零:JSP是谁? 话说故事的开头是这样的:JSP全名为Java Server Pages,其根本是一个简化的Servlet设计:后来的详细事情有请各位自便.美女→找→谷哥 or 帅哥→找→度娘 插播: ...

  9. fflush - 刷新一个流

    SYNOPSIS 总览 #include <stdio.h> int fflush(FILE *stream); DESCRIPTION 描述 函数 fflush 强制在所给的输出流或更新 ...

  10. 【luogu P3608 [USACO17JAN]Balanced Photo平衡的照片】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3608 乍一看很容易想到O(N^2)的暴力. 对于每个H[i]从i~i-1找L[i]再从i+1~n找R[i], ...