首页 > 编程语言 >Java8方法引用简化Lambda

Java8方法引用简化Lambda

时间:2024-03-09 14:13:10浏览次数:34  
标签:Arrays Java8 简化 Student new import o2 o1 Lambda

静态方法引用

import lombok.AllArgsConstructor;
import lombok.Data;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;
import java.util.zip.DeflaterOutputStream;

/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/8 23:35
 */
@Data
@AllArgsConstructor
class Student{
    int age;
    double height;
}
public class LambdaDemo {
    public static void main(String[] args) {
        Student[] students = new Student[2];
        students[0] = new Student(11, 180.9);
        students[1] = new Student(19, 180.6);
        /*
        Arrays.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getAge() - o2.getAge();
            }
        });
        */
        /*
        Arrays.sort(students, (o1, o2)-> o1.getAge() - o2.getAge());
        */
        //Arrays.sort(students, (o1, o2)-> CompareByAge.compareByAge(o1,o2));
        Arrays.sort(students, CompareByAge::compareByAge);
    }
}
class CompareByAge{
    static int compareByAge(Student o1, Student o2){
        return o1.getAge() - o2.getAge();
    }
}

实例方法引用

import lombok.AllArgsConstructor;
import lombok.Data;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;
import java.util.zip.DeflaterOutputStream;

/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/8 23:35
 */
@Data
@AllArgsConstructor
class Student{
    int age;
    double height;
}
public class LambdaDemo {
    public static void main(String[] args) {
        Student[] students = new Student[2];
        students[0] = new Student(11, 180.9);
        students[1] = new Student(19, 180.6);
        Arrays.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return 0;
            }
        });
        //实现年龄降序排序从
        //Arrays.sort(students, (o1,o2)-> o2.getAge() - o1.getAge());
        /*
        final CompareByAge compareByAge = new CompareByAge();
        Arrays.sort(students, (o1,o2)-> compareByAge.compareByAgeDesCheck(o1,o2));
        */
        /*
        final CompareByAge compareByAge = new CompareByAge();
        Arrays.sort(students, (o1,o2)-> compareByAge.compareByAgeDesCheck(o1,o2));
         */
        final CompareByAge compareByAge = new CompareByAge();
        Arrays.sort(students, compareByAge::compareByAgeDesCheck);
    }
}
class CompareByAge{
    public static int compareByAge(Student o1, Student o2){
        return o1.getAge() - o2.getAge();
    }
    public int compareByAgeDesCheck(Student o1, Student o2){
        return o2.getAge() - o1.getAge();
    }
}

特定类型的方法引用

import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.Arrays;
/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/8 23:35
 */
@Data
@AllArgsConstructor
class Student{
    int age;
    double height;
}
public class LambdaDemo {
    public static void main(String[] args) {
        String[] names = new String[]{"boby", "angela", "Andy", "dlei", "caocao", "Babo", "jack", "Cici"};

//        Arrays.sort(names, new Comparator<String>() {
//            @Override
//            public int compare(String o1, String o2) {
//                return o1.compareToIgnoreCase(o2);
//            }
//        });

//        Arrays.sort(names, (o1, o2)->o1.compareToIgnoreCase(o2));

        //如果某个Lambda表达式只是调用一个实例方法,并且前面参数列表中的第一个参数是作为方法的主调,后面的所有参数都是作为该实例方法的入参
        //此时就可以使用特定类型的方法引用
        Arrays.sort(names, String::compareToIgnoreCase);
        System.out.println(Arrays.toString(names));
    }
}

构造器引用

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Arrays;
/**
 * @author Pickle
 * @version V1.0
 * @date 2024/3/8 23:35
 */
@Data
@AllArgsConstructor
class Student{
    int age;
    double height;
}
public class LambdaDemo {
    public static void main(String[] args) {
//        CreateCar cc = new CreateCar(){
//            @Override
//            public Car create(String name, Double price) {
//                return new Car(name, price);
//            }
//        };
        //如果某个Lambda表达式李只是在创建对象,并且前后参数情况一致,可以使用构造器引用。

//        CreateCar cc = (String name, Double price)->  new Car(name, price);

        CreateCar cc = Car::new;

        final Car car = cc.create("Pickle",49.9);

        System.out.println(car);
    }
}
@FunctionalInterface
interface CreateCar{
    Car create(String name, Double price);
}
@Data
@NoArgsConstructor
@AllArgsConstructor
class Car{
    private String name;
    private Double prices;
}

标签:Arrays,Java8,简化,Student,new,import,o2,o1,Lambda
From: https://www.cnblogs.com/poteitoutou/p/18062112

相关文章

  • 大地形的一种简化RVT
    【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!一、开发需求这是工程开发的细节,不是理论篇,不了解RVT理论概念的,请先搜索。RVT的理论普及度比较高,FARCRY5和UnrealEngine里都有大量的分享,这种方......
  • c++ lambda表达式
    引入lambda表达式也有人称之为匿名函数,能够在任何作用域下快速定义一个函数下面这行代码就是一个最简单的lambda表达式,最后输出为3autof=[](intx,inty)->int{returnx+y;};cout<<f(1,2);我们来解析一下lambda表达式autof=[](intx,inty)->int{returnx+y;};......
  • C#中的delegate与Lambda表达式
    参考:Lambda表达式和匿名函数 什么是lambda表达式?C#中的lambda表达式是一种匿名函数,可以用于简化代码,避免定义命名函数或委托。lambda表达式的语法如下:(parameter1,parameter2,...)=>expressionlambda表达式的示例:C#//将一个数字加1Func<int,int>addO......
  • C#lambda与Linq区别
    相同点:都是用于查询和筛选数据的工具。异同点:**1.语法不同:Lambda是一种匿名函数,用于创建委托和表达式树;而Linq是一种查询语句,它使用特定的关键字和语法来查询数据。**2.功能不同:Lambda表达式可用于任何需要委托或表达式树的场合,而Linq语句只能用于查询和筛选数据。**3......
  • 从零开始搭建Springboot开发环境(Java8+Git+Maven+MySQL+Idea)之一步到位
    说明所谓万事开头难,对于初学Java和Springboot框架的小伙伴往往会花不少时间在开发环境搭建上面。究其原因其实还是不熟悉,作为在IT界摸爬滚打数年的老司机,对于各种开发环境搭建已经了然于胸,自己当年也是这么过来的。今天我就毕其功于一役,解放大家的时间,让凡人的环境配置见鬼去吧......
  • Lambda表达式
    功能接口的传递在JDK8之前,函数参数的功能性接口往往用匿名内部类的形式实现,但是JDK8更新了Lambda表达式的新特性,简化了匿名内部类。Java8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。lambda表......
  • lambda(持续补充)
    1lambda的捕获列表类似于bind的参数绑定:将定义lambda定义处的绑定的变量值作为该lambda的固定参数。e.gvoidcallfunction(){intdd=100;intee=200;autolam=[dd,ee](intparam1)->int{returndd+ee+param1;};------11处在定义lambda的地方dd,ee就给定了是100,20......
  • 使用 dat.GUI.js 简化试验流程
    导入jsimport{GUI}from"three/addons/libs/lil-gui.module.min.js";代码//定要要设置的属性varcontrols=new(function(){this.rotationSpeed=0.02;this.bouncingSpeed=0.03;//球体弹跳速度})();vargui=newGUI();gui.add(controls,"rotationS......
  • Arcmap简化面操作.
     简化面操作能移除面要素中的曲线段环.使其在遍历要素JSON时,使用rings,(当有曲线换时,是  curveRings属性) 1.打开“简化面”工具.  (英文搜索:  SimplifyPolygon)     2.执行简化.>注意! 需要设置容差.容差设置精度值越小,越贴近原始......
  • Java笔记:Lambda表达式
    Lambda表达式在Java中是函数式编程的一种体现,允许把函数作为一个方法的参数传递进方法中,或者将函数作为方法的返回值。1.语法和基础使用语法://Lambda实现是一个简单的表达式(parameters)->expression;//Lambda实现是一个函数体(parameters)->{statements;}paramet......