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. linux 解决 gvfsd-smb-browse CPU 100%占用

    原文地址:https://bugzilla.redhat.com/show_bug.cgi?id=1303300 1: sudo vim /etc/samba/smb.conf 2:定位到[globa ...

  2. 配置ftp服务器

    计算机管理->用户->添加用户 iis网站右键->添加ftp站点(没有此选项确认已安装及开启了ftp服务)->进行相关设置即可

  3. let和const命令整理

    一.let命令 基本用法 ES6 新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. for循环的计数器,就很合适使用let命令. for循环还 ...

  4. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:0.概述

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 序言 帖主和队友仿制了一个简单版的微信,其中,队友是用Unity3D做前段,帖主用Java的Mina.Hiberna ...

  5. C# 字符串转组件名、变量名

    字符串转组件名 (Controls["button1"] as Button).Text = "Hello";//单独组件 (Controls[].Contro ...

  6. java Vamei快速教程08 继承

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 继承(inheritance)是面向对象的重要概念.继承是除组合(composit ...

  7. Trie:字典树

    简介 \(Trie\),又称字典树或前缀树,是一种有序树状的数据结构,用于保存关联数组,其中的键值通常是字符串. 作用 把许多字符串做成一个字符串集合,并可以对其进行快速查找(本文以求多少个单词是一个 ...

  8. 2018.10.03 NOIP+ 模拟赛 解题报告

    得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...

  9. scikit-learn 中 OneHotEncoder 解析

    概要 在 sklearn 包中,OneHotEncoder 函数非常实用,它可以实现将分类特征的每个元素转化为一个可以用来计算的值.本篇详细讲解该函数的用法,也可以参考官网 sklearn.prepr ...

  10. Scanner和 Random类,控制语句的例题,商品管理(直接赋值)

    Scanner类的使用: import java.util.Scanner; class Demo02 { public static void main(String[] args) { //1.导 ...