Lambda表达式之方法的引用

以下都是示例
public class Syntax3 {
    public static void main(String[] args) {
        //方法引用
        //可以快速的将一个lambda表达式的实现指向一个已经实现的方法.
        //语法: 方法的隶属者 :: 方法名
        //注意:
        //1. 参数数量和类型一定要和接口中定义的方法一致
        //2. 返回值的类型也要和接口定义的方法一致
        LambdaSingleReturnSingleParameter lambda = a -> change(a);
        lambda.test(10);    //20

        LambdaSingleReturnSingleParameter lambda2 = Syntax3::change;
        int result = lambda2.test(10);  //20
    }

    private static int change(int a){
        return a*2;
    }
}

构造方法的引用

person类
public class Person {

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("有参构造执行了");
    }

    public Person() {
        System.out.println("无参构造执行了");
    }
}
引用
public class Syntax4 {
    public static void main(String[] args) {
        //一般用法
        PersonCreate create = () -> new Person();
        create.getPerson();
        //构造方法的引用
        PersonCreate create1 = Person::new;
        create1.getPerson();

        PersonCreate2 create2 = Person::new;
        create2.getPerson("Jim", 20);
    }

    /**
     * 无参person
     */
    interface PersonCreate{
        Person getPerson();
    }

    /**
     * 有参person
     */
    interface PersonCreate2{
        Person getPerson(String name, int age);
    }
}

集合的排序

public class Example {
    public static void main(String[] args) {
        ArrayList<Person> people = new ArrayList<>();
        people.add(new Person("小明", 10));
        people.add(new Person("小嘎", 13));
        people.add(new Person("小红", 9));
        people.add(new Person("小强", 6));
        people.add(new Person("老王", 27));
        people.add(new Person("老表", 28));

        people.sort(((o1, o2) -> o2.age -o1.age));
        System.out.println(people);
    }
}

TreeSet的排序

public class Example2 {
    public static void main(String[] args) {
        //TreeSet排序
        //使用Lambda表达式来实现Compare接口,实例化TreeSet, 否则TreeSet不知道排序规则,会报错
        TreeSet<Person> set = new TreeSet<Person>((o1,o2) -> {
            if(o2.age >= o1.age){
                return -1;
            }else{
                return 1;
            }
        });
        set.add(new Person("小明", 10));
        set.add(new Person("小嘎", 13));
        set.add(new Person("小红", 9));
        set.add(new Person("小强", 6));
        set.add(new Person("老王", 27));
        set.add(new Person("老表", 28));
        System.out.println(set);
    }
}

原文地址:https://www.cnblogs.com/shansm/p/12547561.html

时间: 2024-10-09 20:25:49

Lambda表达式之方法的引用的相关文章

Java8 之 lambda 表达式、方法引用、函数式接口、默认方式、静态方法

今天我来聊聊 Java8 的一些新的特性,确实 Java8 的新特性的出现,给开发者带来了非常大的便利,可能刚刚开始的时候会有点不习惯的这种写法,但是,当你真正的熟悉了之后,你一定会爱上这些新的特性的,这篇文章就来聊聊这些新特性. lambda 表达式 lambda 表达式在项目中也是用到了,这种新的语法的加入,对于使用 Java 多年的我,我觉得是如虎添翼的感觉哈,这种新的语法,大大的改善了以前的 Java 的代码,变得更加的简洁,我觉得这也是为什么 Java8 能够很快的流行起来的原因吧.

Lambda 表达式与方法引用(二)

在上一章我们介绍了函数式编程的概念和函数式接口.Lambda 表达式就是函数式编程的具体体现,它需要借助函数式接口才能应用在 Java 语言中. 定义 在编程语言中,lambda 表达式是一种用于指定匿名函数或者闭包的运算符.Lambda 可以很清晰地表达一个匿名函数,可以被传递.有了 Lambda 表达式之后,Lambda 表达式为 Java 添加了缺失的函数式编程特性,使我们能将函数当作一等公民看待. 在将函数作为一等公民的语言中,Lambda 表达式的类型是函数.但在 Java 中,Lam

编写高质量代码改善C#程序的157个建议——建议37:使用Lambda表达式代替方法和匿名方法

建议37:使用Lambda表达式代替方法和匿名方法 在建议36中,我们创建了这样一个实例程序: static void Main(string[] args) { Func<int, int, int> add = Add; Action<string> print = Print; print(add(1, 2).ToString()); } static int Add(int i, int j) { return i + j; } static void Print(stri

.net mvc lambda表达式Contains方法

Lambda表达式Contains方法(等价于SQL语句中的like)使用注意事项: 众所周知,想在EntityFrame实体框架中使用类似于SQL语句中like的效果时就的使用Contains方法了.可是关于Contains方法使用过程中会出现的细节问题,并没有专门的文章来指出来. 1.使用Contains方法的必备条件: Contains等价于SQL中的like语句.不过Contains只针对于字符串(string)类型的数据而言.如果是int等数值类型,则不会有Contains方法的存在,

java8之lambda表达式(方法引用)

有些时候,你想要传递给其他代码的操作已经有实现的方法了.示例: button.setOnAction(event -> System.out.println(event); 如果你能够只将println方法传递给setOnAction方法,就更好了!下面是改后的代码: button.setOnAction(System.out::println); 表达式System.out::println是一个方法引用,等同于lambda表达式: x -> System.out.println(x) 正如

Java 8 新特性:Lambda 表达式之方法引用(Lambda 表达式补充版)——诺诺&quot;涂鸦&quot;记忆

----------   诺诺学习技术交流博客.期待与您交流!    ---------- 详情请查看:http://blog.csdn.net/sun_promise  方法引用 (注:此文乃个人查找资料然后学习总结的,若有不对的地方,请大家指出,非常感谢!) 1.方法引用简述 方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法.方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文.计算时,方法引用会创建函数式接口的一个实例. 当Lambda表达式中

JDK8的lambda表达式、方法引用

(部分转自:https://www.cnblogs.com/xiaoxi/p/7099667.html) 1. lambda表达式 以前定义一个Thread: 1 final int i = 0; 2 new Thread(new Runnable() { 3 @Override 4 public void run() { 5 System.out.println("i = " + i); 6 } 7 }).start(); lambda表达式定义: 1 int i = 0; 2 ne

Lambda表达式与方法引用

1 Lambda表达式 1.1 函数式编程思想概述 在数学中,函数就是有输入量.输出量的一套计算方案,也就是"拿数据做数据" 面向对象思想强调"必须通过对象的形式来做事情" 函数式思想则尽量忽略面向对象的复杂语法:"强调做什么,而不是以什么形式去做" 而我们要学的Lambda表达式就是函数式思想的体现 1.2 体验Lambda表达式 需求:启动一个线程,在控制台输出一句话:多线程程序启动了 方式1: 定义一个类MyRunnable实现Runnab

十二、C# 委托与Lambda表达式(匿名方法的另一种写法)

委托与Lambda表达式 1.委托概述 2.匿名方法 3.语句Lambda 4.表达式Lambda 5.表达式树 一.委托概述 相当于C++当中的方法指针,在C#中使用delegate 委托来提供相同的功能, 它将方法作为对象封装起来,允许在"运行时"间接地绑定一个方法调用. 声明的委托相当于一种自定义的数据类型. 1.背景 冒泡排序 1 static class SimpleSort1 2 { 3 public static void BubbleSort(int[] items)