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)".函数式接口代表只 ...
随机推荐
- python小游戏之贪吃蛇
本程序需要安装pygame,请自行百度安装...... 废话不多说,直接上代码 import pygame,sys,time,random from pygame.locals import * # ...
- linux命令模式下如何切换首行和尾行
G是到最后一行,gg是到第一行
- mac 查看python安装路径
1.terminal : input: which Python 2.terminal: input : python --->import sys ----> print sys.p ...
- weka属性选择使用
醉了--- package edu.dcy.weka; import java.io.FileWriter; import java.util.ArrayList; import java.util. ...
- bootstrap table保留多选框的分页
有时候需要完成这种情况: 1.需要设置的是如果第一页点击复选框然后点击其他页面的话,第一页的选项被保存了 2.将所有选择好的复选款的数据保存在数组中 bootstrap table官方文档http:/ ...
- linux 命令——28 tar
通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大.tar命令可以为linux的 ...
- iOS 集成支付宝过程中 我遇到的一些坑,请大家注意啦(ALI69错误,ALI64错误)
支付宝很早一段时间就集成了,之前由于一直忙于开发就没有总结,今天整理桌面的时候看到,当时做支付时候的一些散落的笔记,就稍微整理一下,给大家分享一下. 第一:当时调用支付宝的时候,总是调不起来,进过断点 ...
- 初学Python遇到的坑
问题一 脚本内容 MacBookPro:Desktop mac$ cat wike.py #!/usr/bin/python from urllib.request import urlopen fr ...
- tomcat服务器用Servlet类查找磁盘文件上的Json信息,如果匹配则在浏览器上显示出该条内容的全部信息
package com.swift; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOE ...
- Oracle数据库学习(一)
Oracle数据库由甲骨文公司开发,是基于对象的关系型数据库:下面是简单的学习数据库操作等知识. 1.SQL单表查询(设一个表名为tab) (1)查询所有记录 select * from tab(一般 ...