`

java8 lambda和方法引用示例

    博客分类:
  • java
阅读更多
public class Test {

    protected interface FunctionEx {
        void execute(String a);

        default void defaultMethod() {
            System.out.println("FunctionEx default executed!");
        }
    }


    public String saySomething(String a) {
        System.out.println("say :" + a);
        // 当前FunctionEx.execute返回void,saySomething有返回值不影响方法引用,
        // 当FunctionEx.execute有返回值,则saySomething返回值类型必须与之相同,
        // 否则不能引用
        return "";
    }

    public void doTest(String a, FunctionEx functionEx) {
        System.out.print("doTest ");
        functionEx.execute(a);
    }

    public void doTest2(String a) {

        doTest(a, this::saySomething);
        doTest(a, n -> this.saySomething(n)); // 此处this可省略
        doTest(a, n -> saySomething(n));
        doTest(a, new FunctionEx() {
            @Override
            public void execute(String a) {
                // this.saySomething(a);
                // 匿名内部类的this指向匿名内部类,所以此处不能用this.saySomething
                // lambda的this指针指向的是包围lambda表达式的类
                saySomething(a);
            }
        });
    }


    public static void main(String[] args) {
        String str = "hello";

        Test test = new Test();

        test.doTest(str, n -> test.saySomething(n));
        test.doTest(str, test::saySomething); // 方法引用的方式可以简化lambda表达式的写法
        // 可使用方法引用的前提:lambda的主体仅包含一个表达式,且该表达式仅调用了一个已经存在的方法。
        test.doTest(str, n -> {
            test.saySomething(n);
            // defaultMethod(); // lambda表达式不能调用接口中的默认方法
        });
        test.doTest(str, new FunctionEx() {
            @Override
            public void execute(String a) {
                test.saySomething(a);
                defaultMethod();// 匿名类实现的抽象方法允许调用接口中的默认方法
            }
        });


        System.out.println("doTest2 start");
        test.doTest2(str);
    }

}
分享到:
评论

相关推荐

    Java 8 lambda表达式

    Lambda表达式可以与方法引用和构造器引用结合使用,进一步简化代码。例如,`Arrays.sort(arr, Integer::compareTo)`,这里的`Integer::compareTo`是一个方法引用,等同于`(a, b) -> a.compareTo(b)`。 6. **默认...

    Java 1.8 lambda表达式示例源码

    Java 8还引入了方法引用来进一步简化代码。对于静态方法,我们可以直接使用类名::静态方法;对于非静态方法,我们可以使用实例::方法。比如,使用Collections的binarySearch()方法: ```java int index = ...

    java 8 lambda demo

    在描述中提到的"java 8 lambda demo"很可能包含了使用Lambda表达式的示例代码。这些示例可能涉及到以下场景: 1. **Stream API**:Lambda与Java 8的Stream API结合使用,可以进行高效的数据处理。例如,过滤、映射...

    java8 探讨与分析匿名内部类、lambda表达式、方法引用的底层实现的测试用例

    在Java 8中,匿名内部类、Lambda表达式和方法引用是重要的新特性,它们极大地简化了代码,提升了代码的可读性和效率。下面将详细探讨这三个知识点,并结合提供的测试用例进行分析。 1. **匿名内部类**: 匿名内部类...

    JAVA 8 Lambda表达式-Lambda Expressions.rar

    Java 8 的 Lambda 表达式是 Java 编程语言的重大革新,它引入了一种新的函数式编程...通过深入学习这份文档,你可以更好地理解和掌握 Java 8 的 Lambda 表达式,从而提升你的 Java 编程技巧,写出更优雅、高效的代码。

    “Lambda力学”演示示例_Java_下载.zip

    此外,Java 8还引入了方法引用来替代Lambda表达式,当函数体与某个已存在的方法签名完全匹配时,我们可以直接引用该方法,简化代码。例如: ```java Collections.sort(people, Comparator.comparing(Person::getAge...

    JavaLambda表达式和匿名类.pdf

    在描述中提到的代码示例中,对比了使用匿名类和Lambda表达式实现相同功能的方法。 首先,让我们看看匿名类的使用。在传统的Java编程中,如果需要一个简单的接口实现,我们通常会创建一个新的类来实现这个接口,如`...

    Java8 Lambda表达式模板方法实现解析

    总的来说,Java8 Lambda表达式结合模板方法,使得我们可以灵活地定义和使用函数式接口,实现代码的模块化和可扩展性。同时,通过Java的注解机制,可以为Lambda表达式和函数式接口提供更多的元信息,如编译时检查、...

    Java8的lambda表达式

    Java 8 的 Lambda 表达式是 Java 语言的一个重大更新,它引入了一种...通过学习和实践 `TestJava8` 文件中的示例,你可以深入理解 Java 8 Lambda 表达式的使用方式,并将其应用于实际开发中,提升代码的可读性和效率。

    java lambda入门到高级代码实例

    Lambda表达式还可以和方法引用来配合,例如,我们可以通过以下方式直接引用`String::length`方法: ```java List<String> list = Arrays.asList("one", "two", "three"); list.sort((a, b) -> a.length() - b....

    java8新特性,Lambda表达式

    此外,Java 8还引入了方法引用来替代Lambda表达式,当函数体与已有的方法签名匹配时,可以直接引用方法,如`System.out::println`。 综上所述,Java 8的Lambda表达式和函数式接口不仅提升了代码的简洁性和可读性,...

    使用Java 8 Lambda表达式将实体映射到DTO的操作

    在本文中,我们将详细介绍如何使用Java 8 Lambda表达式将实体映射到DTO,并提供一些相关的知识点和示例代码。 什么是Lambda表达式? Lambda表达式是一种匿名函数,可以作为函数式接口的实例化对象传递给方法或返回...

    java8看不到源码-java8-lambda-samples:伴随我关于Java8lambda表达式的闪电演讲的代码

    这个名为 "java8-lambda-samples" 的项目是为了配合一场关于 Java 8 lambda 表达式的闪电演讲而创建的,包含了示例代码,帮助开发者理解和学习这一新特性。 首先,我们需要理解 lambda 表达式的基本概念。Lambda ...

    Java8新特性示例代码

    除了Lambda表达式,Java8还引入了方法引用和构造器引用,它们可以直接引用已有方法或构造器,进一步简化代码。例如: ```java Function, Integer> lengthExtractor = String::length; Integer length = ...

    Java8 流式Lambda相关案例

    Java8 是一个重要的Java语言版本,它引入了许多创新特性,其中最引人注目的就是流(Stream)API和Lambda表达式。这两个特性极大地提升了Java在处理集合数据时的效率和可读性,使得代码更加简洁、高效。在这个“Java8...

    java-lambda-expressions:Java 8中Lambda表达式的一些示例

    下面,我们将深入探讨Lambda表达式的使用和其在Java 8中的应用。 1. **什么是Lambda表达式** Lambda表达式是一种简化的函数定义方式,它可以被视为没有名字的函数,通常用于实现接口的一个方法。在Java中,如果一...

    4- Java 开发示例.zip_Java 8_java开发事例_luckt2s_pudnco

    3. **方法引用**:除了lambda表达式,Java 8还提供了方法引用,可以直接引用类的静态方法或实例方法,进一步简化代码。 4. **Stream API**:Stream API是Java 8的另一大亮点,它提供了一种处理集合数据的新方式。...

    Java的lambda表达式讲解代码(各种lambda表达式使用方式:无参、一个参数、多参数、简化形式...)

    4、函数式接口使用:学习如何使用Lambda表达式与Java中的函数式接口进行交互,包括传递函数、使用函数式接口的默认方法和方法引用。 本源码资源旨在帮助用户掌握以下几个方面: 1、Lambda表达式概述:了解Lambda...

    OnJava8-Examples-3.0_soucecode_java_

    2. **方法引用来增强功能**:除了lambda,Java 8还引入了方法引用,它允许直接引用已有方法,而不需要在lambda表达式中重复方法体。例如,`Arrays::sort`可以直接用于排序操作。 3. **流(Stream)API**:Java 8的...

    深入学习 Java 中的 Lambda

    在Java 8中,方法成为了一等公民,意味着它们可以像其他值一样被传递和作为返回值。这得益于方法类型化,即方法可以被当作实现了特定接口的实例。例如,`LambdaMap::oneStringArgumentMethod`实际上隐式地实现了`...

Global site tag (gtag.js) - Google Analytics