栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java8学习笔记 - 在哪里可以使用Lambda表达式 + 什么是函数式接口

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java8学习笔记 - 在哪里可以使用Lambda表达式 + 什么是函数式接口

Java8学习笔记 - 在哪里可以使用Lambda表达式 + 什么是函数式接口
  • 1. 定义
  • 2. 举例
    • 2.1 定义一个函数式接口。
    • 2.2 定义接收`函数式接口`类型参数的方法
    • 2.3 调用
  • 3. Java8自带的一些函数式接口
    • 3.1. Java8实战 —— 表3-2 Java 8中的常用函数式接口
    • 3.2. Java8实战 —— 表3-3 Lambdas及函数式接口的例子
  • 4. 参考资料

1. 定义
  1. 你可以在函数式接口上使用Lambda表达式。也可以将它作为变量传递。
    1.1. Lambda表达式可以赋给一个变量 (类型为:函数式接口)
    1.2. Lambda表达式可以传递给一个接受函数式接口作为参数的方法
  2. 函数式接口就是只定义了一个抽象方法的接口。
    2.1. 我们可以粗略的将函数式接口中的那个抽象方法,理解成Lambda表达式的函数声明(函数描
    述符)。至此Lambda要接收几个参数,返回什么类型就都明了了。
    2.2. 至于为什么只能是一个抽象方法。很简单嘛,直接看2.2。你要是接口里有两方式,鬼知道用哪个?
2. 举例 2.1 定义一个函数式接口。

@FunctionalInterface不强制,但建议加上。它表示这是一个函数式接口。类似于用@Override来标示重写。

	@FunctionalInterface
	public interface NameFormat{
	    String format(String str);
	}

2.2 定义接收函数式接口类型参数的方法

定义一个方法,它可以接收函数式接口类型的参数

    public void showName(String name, NameFormat f){
        System.out.println(f.format(name));
    }
2.3 调用

调用时,我们可以根据需要,将格式化的逻辑代码以Lambda表达式的形式传进来。

	Hero hero = new Hero();
	hero.showName("笨笨", name -> "耀眼的" + name);
	Hero hero = new Hero();
    NameFormat nf = name -> "最最最爱你的" + name;
    hero.showName("笨笨", nf);
3. Java8自带的一些函数式接口

大多数情况直接用就行了,实在无法满足需求,还可以自定义嘛。

3.1. Java8实战 —— 表3-2 Java 8中的常用函数式接口
函数式接口函数声明针对基础类型的优化版
PredicateT->booleanIntPredicate
LongPredicate
DoublePredicate
ConsumerT->voidIntConsumer
LongConsumer
DoubleConsumer
FunctionT->RIntFunction
IntToDoubleFunction
IntToLongFunction
LongFunction
LongToDoubleFunction
LongToIntFunction
DoubleFunction
ToIntFunction
ToDoubleFunction
ToLongFunction
Supplier()->TBooleanSupplier
IntSupplier
LongSupplier
DoubleSupplier
UnaryOperatorT->TIntUnaryOperator
LongUnaryOperator
DoubleUnaryOperator
BinaryOperator(T,T)->TIntBinaryOperator
LongBinaryOperator
DoubleBinaryOperator
BiPredicate(L,R)->boolean
BiConsumer(T,U)->voidObjIntConsumer
ObjLongConsumer
ObjDoubleConsumer
BiFunction(T,U)->RToIntBiFunction
ToLongBiFunction
ToDoubleBiFunction
3.2. Java8实战 —— 表3-3 Lambdas及函数式接口的例子
使用案例Lambda 例子对应的函数式接口
布尔表达式(List list) -> list.isEmpty()Predicate>
创建对象() -> new Apple(10)Supplier
消费一个对象(Apple a) -> System.out.println(a.getWeight())Consumer
从对象获取属性(String s) -> s.length()Function
ToIntFunction
合并两个值(int a, int b) -> a * bIntBinaryOperator
比较两个对象(Ap a1, Ap a2) -> a1.getWeight().compareTo(a2.getWeight())Comparator 或
BiFunction 或
ToIntBiFunction
4. 参考资料

Java8自带的一些函数式接口

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361389.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号