/*Lambda表达式作用: 简化匿名内部类对象使用前提: 函数式接口函数式接口: 只有一个必须被重写的抽象方法的接口称为函数式接口检查函数式接口注解: @FunctionalInterface 强制检测语法:() ->  {}() :  要重写的抽象方法的参数列表-> :  箭头函数 lambda符号 ,具有上下文推到的作用{} :  要重写抽象方法的方法体*/
public class Test01 {public static void main(String[] args) {String str = "";Smoke s =  new Smoke(){@Overridepublic void behavior(int num) {System.out.println("抽烟一共花了" + num + "$");}};s.behavior(20);//1.lambda写法1Smoke s1 = (int num)->{System.out.println("lambda表达式写法1" + num);};s1.behavior(50);//2.lambda写法2 : 当lambda体(重写方法的方法体)中的语句只有一句,前后的{}可以省略Smoke s2 = (int num )-> System.out.println("lambda表达式写法二" + num);s2.behavior(222);3.lambda写法3 : 参数的数据类型可以省略Smoke s3 = (num) -> System.out.println("lambda表达式写法三" + num);s3.behavior(333333333);//4.lambda写法4 : 参数只有一个,前后的()可以省略Smoke s4 = num -> System.out.println("lambda表达式写法四" + num);s4.behavior(444444444);//5.lambda写法5 : 当方法存在返回值类型,{}lambda体中只有一条语句,并且是return语句,前后的{}与return关键字可以一起省略Moke m = () -> "lambda表达式写法五";System.out.println(m.mmm());//5.lambda写法5 : 当方法存在返回值类型,{}lambda体中只有一条语句,并且是return语句,前后的{}与return关键字可以一起省略Binary b = num -> num<<5;System.out.println(b.mmm(10));}
}interface Smoke{public void behavior(int num);
}
interface Moke{public String mmm();
}
interface Binary{public int mmm(int num);
}

题目一

package com.yjxxt.oop.basic.Work04.day03;import java.util.*;/** 题一:调用Collections.sort()方法,通过定值排序比较两个Employee(先按年龄比,年龄相同按姓名比),使用Lambda作为参数传递* 分析:*    1.定制排序:指自定义比较器|定制排序*          自然排序:内部比较器|自然排序*  2.先比较年龄,年龄相同才比较姓名*/
public class TestLambda02 {public static void main(String[] args) {List<Employee> list = new ArrayList<>();list.add(new Employee(18,"张三",1101));list.add(new Employee(14,"李四",1103));list.add(new Employee(19,"王王",1105));list.add(new Employee(18,"赵四",1104));list.add(new Employee(218,"克棒",1107));list.add(new Employee(18,"钱七",1110));//匿名内部类解法
//        Collections.sort(list, new Comparator<Employee>() {
//            @Override
//            public int compare(Employee o1, Employee o2) {
//                if(o1.getAge()==o2.getAge()){
//                    return o1.getName().compareTo(o2.getName());
//                }
//                return o1.getAge()-o2.getAge();
//            }
//        });
//        System.out.println(list);//lambda表达式Collections.sort(list,(o1,o2)->{if(o1.getAge()==o2.getAge()){return o1.getName().compareTo(o2.getName());}return o1.getAge()-o2.getAge();});System.out.println(list);}
}class Employee{//属性private int age;private String name;private int id;public Employee() {}public Employee(int age, String name, int id) {this.age = age;this.name = name;this.id = id;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Employee employee = (Employee) o;return age == employee.age &&id == employee.id &&Objects.equals(name, employee.name);}@Overridepublic String toString() {return "Employee{" +"age=" + age +", name='" + name + '\'' +", id=" + id +'}';}@Overridepublic int hashCode() {return Objects.hash(age, name, id);}
}

题目二

package com.yjxxt.oop.basic.Work04.day03;import java.util.stream.Stream;/** 习题二:*    1)声明函数式接口,接口中声明抽象方法,public String getValue(String str)*     2)声明类 TestLambda,类中编写方法使用接口作为参数,讲一个字符串转成大写,并作为方法的返回值*  3)再将一个字符串的第2个和第4个索引位置进行截取子串*/
public class TestLambdaTest03 {public static void main(String[] args) {// 把解决行为当形参,传给方法                                   行为使用了lambda表达式进行简化System.out.println(strHandler("yigezifuchaun", str -> str.toUpperCase())); // toUpperCase()  字符串转大写System.out.println(strHandler("diergezifuchaun", str -> str.substring(2, 5)));//substring(2, 5)  指定区间字符[)}public static String strHandler(String str,A a){return a.getValue(str);}
}
interface A{public String getValue(String str);
}

题目三

package com.yjxxt.oop.basic.Work04.day03;/** 习题三:*   1)声明一个带两个泛型的函数式接口,泛型类型为<T,R> T为参数,R为返回值*  2)接口中声明对应抽象方法*  3)在TestLambda类中声明方法,参数三个,两个long类型的参数,接口作为参数,接口实现中计算两个long型参数的和*  4)再计算两个long型参数的乘积*/
public class LambdaTest04 {public static void main(String[] args) {// 把解决行为当形参,传给方法System.out.println(testLong(100L, 150L, (l1, l2) -> l1 + l2));  //计算两个long的和System.out.println(testLong(100L, 150L, (l1, l2) -> l1 * l2));  //计算两个long的乘机}public static Long testLong(Long l1 , Long l2,B<Long,Long> b){return b.test(l1,l2);}
}
interface B<X,Y>{Y test(X x,X x1);
}

四大内置函数式接口

package com.yjxxt.oop.basic.Work04.day03;import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;/*四大内置函数式接口  必须掌握***消费型接口 Consumer<T>void accept(T t)  有一个参数没有返回值函数型接口 Function<T,R>R apply(T t)    有一个参数一个返回值段言型接口 Predicate<T>boolean test(T t)   一个参数一个boolean返回值供给型接口 Supplier<T>T get()             没有参数一个返回值*/
public class Test05 {public static void main(String[] args) {// 消费型接口 Consumer<T>testConsumer(150D,d-> System.out.println("今天出去消费类了 " + d +"$"));// 函数型接口 Function<T,R>System.out.println(testFunction(88, num -> num << 5));   // <<//段言型接口 Predicate<T>System.out.println(testPredicate(List.of("dwadaw", "dsa", "dgw", "w", "rafgd", "s"), str -> str.length() > 3));//供给型接口 Supplier<T>System.out.println(testSupplier(5, () -> (int) (Math.random()* (50 - 10) + 10)));}//消费型// 消费型接口 Consumer<T>//            void accept(T t)  有一个参数没有返回值public static void testConsumer(Double d1, Consumer<Double> dd){dd.accept(d1);}// 函数型接口 Function<T,R>//            R apply(T t)    有一个参数一个返回值public static int testFunction(int num, Function<Integer,Integer> fct){return fct.apply(num);}// 段言型接口 Predicate<T>//boolean test(T t)   一个参数一个boolean返回值public static List<String> testPredicate(List<String> str, Predicate<String> prd){List<String> li = new ArrayList<>();for (String s:str){if(prd.test(s)){li.add(s);}}return li;}// 供给型接口 Supplier<T>//            T get()             没有参数一个返回值public static List testSupplier(int num , Supplier<Integer> supplier){List<Integer> list = new ArrayList<>();for (int i = 1;i<=num;i++){list.add(supplier.get());}return list;}}

lambda表达式的五种写法 四大内置函数式接口相关推荐

  1. lambda表达式的3种写法

    lambda表达式: 简单来说,可以看成是对匿名内部类的简写.使用Lambda表达式时,接口必须是函数式接口 基本语法: <函数式接口>  <变量名> = (参数1,参数2.. ...

  2. 回字有四种写法,那你知道单例有五种写法吗

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 转自 ...

  3. 【转】回字有四种写法,那你知道单例有五种写法吗

    目录导航 基本介绍 写法介绍 饿汉式 懒汉式 双重检测 内部类 枚举 总结 基本介绍 单例模式(Singleton)应该是大家接触的第一个设计模式,其写法相较于其他的设计模式来说并不复杂,核心理念也非 ...

  4. 1.22 Lambda表达式的3种简写方式

    使用 Lambda 表达式是为了简化程序代码,Lambda 表达式本身也提供了多种简化形式,这些简化形式虽然简化了代码,但客观上使得代码可读性变差.本节介绍 Lambda 表达式的几种简化形式. 省略 ...

  5. Unity/C# 舍入的五种写法

    舍入的五种写法 0. 简介 舍入是一个数学概念,一种修约规则. 在日常的生活中,我们为了精简格式,记忆方便,常常会使用四舍五入的方法来去掉零头或凑个整数来解决此类问题. 在游戏中开发中,舍入也是数值计 ...

  6. 基于JS实现回到页面顶部的五种写法(从实现到增强)

    为什么80%的码农都做不了架构师?>>>    写法 [1]锚点 使用锚点链接是一种简单的返回顶部的功能实现.该实现主要在页面顶部放置一个指定名称的锚点链接,然后在页面下方放置一个返 ...

  7. js浏览器回到顶部方法_基于JS实现回到页面顶部的五种写法(从实现到增强)

    写法 [1]锚点 使用锚点链接是一种简单的返回顶部的功能实现.该实现主要在页面顶部放置一个指定名称的锚点链接,然后在页面下方放置一个返回到该锚点的链接,用户点击该链接即可返回到该锚点所在的顶部位置 [ ...

  8. Kotlin中单利常用的五种写法

    前言 单利模式是写代码过程中不可避免用到的,下面我总结一下单利常用的五种写法,话不多说了,来一起看看详细的介绍吧 加载类时创建单利 Java实现 public class Config{ privat ...

  9. Java Executor源码解析(7)—Executors线程池工厂以及四大内置线程池

    详细介绍了Executors线程池工具类的使用,以及四大内置线程池. 系列文章: Java Executor源码解析(1)-Executor执行框架的概述 Java Executor源码解析(2)-T ...

最新文章

  1. 蝴蝶优化算法_算法|FFT基础及各种常数优化,5万字笔记:公式推导+代码模板...
  2. 【转帖】漫话C++0x(四) —- function, bind和lambda
  3. [转载] ANTLR——编译原理基础知识
  4. Hadoop生态圈-Ambari控制台功能简介
  5. codeforces 453C Little Pony and Summer Sun Celebration
  6. 5G时代FPGA需求分析
  7. Linux服务器下LNMP安装与配置方法
  8. Javascript特效:简单日历
  9. 密码学的安全性浅析2
  10. 3D打印在学生教育的有哪些应用?
  11. Win10如何取消开机密码?Win10取消开机密码步骤
  12. matlab 不等式组求解例子,matlab求解不等式组
  13. This Apple ID has not yet been used in the ITunes Store/此Apple ID尚未在iTunes Store使用过
  14. nps p2p穿透中遇到的NAT类型过低的问题解决
  15. 【量化金融】多因子选股策略
  16. Qt实现简易的浏览器
  17. IP反查网站,ip反查接口,旁站查询接口大全,通过IP查域名汇总,域名历史解析记录查询,IP地址查对应机房名称、地址,查IP地址的AS号码...
  18. 0927-1这张图可得记一辈子了
  19. 献给 想要学习做网站的学弟学妹们
  20. 程控交换原理教学,程控数字交换系统实验设备

热门文章

  1. JAVA基于的智慧小区计算机毕业设计Mybatis+系统+数据库+调试部署
  2. 学区摇号软件设计_小学摇号,改变了什么?
  3. python 自动抓取分析房价数据——安居客版
  4. 室内人员定位解决方案特点及应用简介
  5. 华为HCIA-Datacom 学习笔记-------第一篇
  6. 无效的合同可以被追认吗
  7. 案例3:百度地图api-个性化地图茶田样式
  8. elementui框架里导航菜单的default-active的作用 v-for里key的意义
  9. 基于单片机的智能空气加湿器设计
  10. SVN 常见4种 无法弹出登录窗