Java匿名内部类和Lambda(->) 的多种写法总结

引入: 最近使用到 Arrays.sort(); 看了他的重载方法(试着模仿一下)

就以这个玩出了许多的方式;如下:自定义排序

首先 写了个冒泡排序(备用)

		//给一个integres 的数组, 然后再给个 Comparator的接口 c
	/**
     *
     * @param  integers 给一个 integres 的数组,作为要排序的数组
     * @param c  接受一个 Comparator 接口 ,然后使用Comparator 重写的 compare 方法
     */
 public static void bubbleSort(Integer[] integers,Comparator c ){

        int temp;

        for(int i = 0 ; i < integers.length-1;i++){
            for(int j = 0 ; j < integers.length -1 -i;j++){

			//判断是从大到小还是从小到大
                if(c.compare(integers[j] , integers[j+1]) > 0){

                    //慢
                    /*integers[j] += integers[j+1];
                    integers[j+1] = integers[j] - integers[j+1];
                    integers[j] = integers[j] - integers[j+1];*/

                    //更快
                    temp = integers[j];
                    integers[j] = integers[j+1];
                    integers[j+1] = temp;

                }
            }
        }

    }

认识几种写法

第一种写法

    //第一种写法 匿名类写法
        bubbleSort(number, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                return (int)o1 - (int)o2;
            }
        });

第二种写法(Lambda)

        // 接受2个参数(数字),并返回他们的差值
        // (x, y) -> x – y
        //第二种写法
        bubbleSort(number, (Object o1 ,Object o2)-> (int)o1 - (int)o2);

第三种写法(Lambda)

        /*第三种写法
        * 1.先把Object 转为 int 然后执行以下操作
        * Comparator.comparingInt((Object o) -> (int) o);
        *
        * 2.会返回 (c1, c2)  -> Integer.compare(keyExtractor.applyAsInt(c1), keyExtractor.applyAsInt(c2));
        * 会读取两个对象 keyExtractor.applyAsInt(c1) , keyExtractor.applyAsInt(c2)
        *
        * 3.(Comparator.comparingInt((Object o) -> (int) o)))读取一个(keyExtractor.applyAsInt(c1))后返回到这里(Comparator.comparingInt((Object o) -> (int) o))),然后再读取一个(keyExtractor.applyAsInt(c2))
        *
        * 4.两个了之后就开始比较Integer.compare
        * public static int compare(int x, int y) {
        *        return (x < y) ? -1 : ((x == y) ? 0 : 1);
        *    }
        *5.最后经过三元运算符后 返回对应的数
        */

        bubbleSort(number, Comparator.comparingInt((Object o) -> (int) o));

然后开始使用

import java.util.Arrays;
import java.util.Comparator;

public class Test {
    public static void main(String[] args) {
        Integer number[] = {1,4,2,23,32,43};
		//第一种写法
        bubbleSort(number, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                return (int)o1 - (int)o2;
            }
        });

		//第二种写法
        //1.先把Object 转为 int 然后执行以下操作
        //Comparator.comparingInt((Object o) -> (int) o);
        //2.会进去 (c1, c2) -> Integer.compare(keyExtractor.applyAsInt(c1), keyExtractor.applyAsInt(c2));
        //然后会读取两个对象keyExtractor.applyAsInt(c1) , keyExtractor.applyAsInt(c2)
        //3.Comparator.comparingInt((Object o) -> (int) o)) 读取一个后返回到这里,然后再读取一个
        //4.两个了之后就开始比较Integer.compare
        // public static int compare(int x, int y) {
        //        return (x < y) ? -1 : ((x == y) ? 0 : 1);
        //    }
        //5.返回 最后的数
        bubbleSort(number, Comparator.comparingInt((Object o) -> (int) o));

		//第三种写法
        bubbleSort(number, (Object o1 ,Object o2)-> (int)o1 - (int)o2);

        System.out.println("排序后的数组"+Arrays.toString(number));

   		 }

   //给一个integres 的数组, 然后再给个 Comparator的接口 c
	/**
     *
     * @param  integers 给一个 integres 的数组,作为要排序的数组
     * @param c  接受一个 Comparator 接口 ,然后使用Comparator 重写的 compare 方法
     */
 public static void bubbleSort(Integer[] integers,Comparator c ){

        int temp;

        for(int i = 0 ; i < integers.length-1;i++){
            for(int j = 0 ; j < integers.length -1 -i;j++){

			//判断是从大到小还是从小到大
                if(c.compare(integers[j] , integers[j+1]) > 0){

                    //慢
                    /*integers[j] += integers[j+1];
                    integers[j+1] = integers[j] - integers[j+1];
                    integers[j] = integers[j] - integers[j+1];*/

                    //更快
                    temp = integers[j];
                    integers[j] = integers[j+1];
                    integers[j+1] = temp;

                }
            }
        }

   	 }
    }

到此这篇关于Java匿名内部类和Lambda(->) 的多种写法总结的文章就介绍到这了,更多相关Java匿名内部类 Lambda内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解Java内部类——匿名内部类

    今天来看看另一个更加神奇的类--匿名内部类. 就像它的名字表示的那样,这个类是匿名的,用完之后,深藏功与名,就像扫地僧那样默默潜藏于深山之中.匿名内部类不仅没有名字,连class关键字都省掉了,而且匿名内部类必须继承于某个类或者实现某个接口,长的就像这样: new 父类(参数列表)|实现接口() { //匿名内部类的内部定义 } 来看一个栗子: public abstract class Human { public abstract void walk(); } 这是一个抽象类,如果使用匿名内

  • Java Lambda表达式与匿名内部类的联系和区别实例分析

    本文实例讲述了Java Lambda表达式与匿名内部类的联系和区别.分享给大家供大家参考,具体如下: 一 点睛 Lambda表达式与匿名内部类存在如下相同点: Lambda表达式与匿名内部类一样,都可以直接访问"effectively final"的局部变量,以及外部类的成员变量(包括实例变量和类变量). Lambda表达式创建的对象与匿名内部类生成的对象一样, 都可以直接调用从接口继承得到的默认方法. Lambda表达式与匿名内部类主要存在如下区别: 匿名内部类可以为任意接口创建实例

  • Java匿名内部类的写法示例

    前言 在Java中调用某个方法时,如果该方法的参数是一个接口类型,除了可以传入一个参数接口实现类,还可以使用匿名内部类实现接口来作为该方法的参数. 匿名内部类其实就是没有名称的内部类,在调用包含有接口类型参数的方法时,通常为零简化代码,不会创建一个接口的实现类作为方法参数传入,而是直接通过匿名内部类的形式传入一个接口类型参数,在匿名内部类中直接完成方法的实现. 创建匿名内部类的基本语法格式如下: new 父接口(){     //匿名内部类实现部分 } 示例 interface Animal{

  • java匿名内部类实例代码详解

    这篇文章主要介绍了java匿名内部类实例代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Person.java package insof; public class Person extends Object{ String name; static int age; public Person() { this.name = "tom"; System.out.println("执行的是构造方法");

  • Java匿名内部类和Lambda(->) 的多种写法总结

    引入: 最近使用到 Arrays.sort(); 看了他的重载方法(试着模仿一下) 就以这个玩出了许多的方式;如下:自定义排序 首先 写了个冒泡排序(备用) //给一个integres 的数组, 然后再给个 Comparator的接口 c /** * * @param integers 给一个 integres 的数组,作为要排序的数组 * @param c 接受一个 Comparator 接口 ,然后使用Comparator 重写的 compare 方法 */ public static vo

  • 关于JavaEE匿名内部类和Lambda表达式的注意事项

    目录 前言 一.匿名内部类 注意事项: 二.Lambda表达式 1.背景 2.函数式接口 3.Lambda表达式的语法 4.Lambda表达式的基本使用 (1)无返回值无参数 (2)无返回值有参数 (3)有返回值无参数 (4)有返回值有参数 总结 前言 上一篇介绍了内部类的前三种类型,链接如下: 关于JavaEE内部类的部分注意事项 接下来将详细介绍匿名内部类以及Lambda表达式的用法和注意事项. 一.匿名内部类 定义在方法中(方法的形参或者实参),没有任何权限修饰符,甚至连类名称都没有的内部

  • Java 中的 Lambda List 转 Map 的多种方法详解

    目录 故事背景 公共代码 方式一(partitioningBy 分两组) 方式二(groupingBy 分多组) 方式三(toMap 自定义<Key, Value>) 故事背景 我们平时在项目中经常会遇到 List 转 Map 的情况,但是传统的方式又显得太臃肿,于是就想到 Lambda 神器,今天我们就来看看都有哪几种转换方式(List -> Map) 公共代码 // Person 实体类 @Data class Person { private String uuid; privat

  • Java详细分析Lambda表达式与Stream流的使用方法

    目录 Lambda Stream流 Lambda Lambda 表达式是一个匿名函数,我们可以把 lambda 表达式理解为一段可以传递的代码(将代码段像数据一样传递).使用它可以写出更简洁, 更灵活的代码.作为一种更紧凑的代码风格,使 java 语言的表达式能力得到的提升. 我们可以知道, Lambda表达式是为简化语法而存在的 ArrayList<String> list = new ArrayList<>(); list.add("a"); list.ad

  • Java创建线程的五种写法总结

    目录 通过继承Thread类并实现run方法创建一个线程 通过实现Runnable接口,并实现run方法的方法创建一个线程 通过Thread匿名内部类创建一个线程 通过Runnable匿名内部类创建一个线程 通过Lambda表达式的方式创建一个线程 通过继承Thread类并实现run方法创建一个线程 // 定义一个Thread类,相当于一个线程的模板 class MyThread01 extends Thread { // 重写run方法// run方法描述的是线程要执行的具体任务@Overri

  • Java学习之Lambda表达式的使用详解

    目录 Lamda表达式 函数式接口 Lambda表达式的推导 函数式接口的不同类型 Lambda表达式与函数式接口的简单应用 Lambda表达式的优缺点 Lamda表达式 λ希腊字母表中排序第11位的字母,英文名称为Lambda,它Lambda表达式是Java SE 8中一个重要的新特性,允许通过表达式来代替功能接口,它与其他方法相同,提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块),实际上是属于函数式编程的概念: 语法如下: (参数) ->表达式 或

  • 详解Java中的Lambda表达式

    简介 Lambda表达式是Java SE 8中一个重要的新特性.lambda表达式允许你通过表达式来代替功能接口. lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块). Lambda表达式还增强了集合库. Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包. 流(stream)就如同迭代器(iterator),但附加了许多额外的功能.

  • Java 进阶使用 Lambda 表达式实现超强的排序功能

    目录 基于Comparator排序 使用 Lambda 表达式替换Comparator匿名内部类 通过静态方法抽取公共的 Lambda 表达式 借助Comparator的comparing方法 多条件排序 在Stream中进行排序 倒序排列 调转排序判断 在Comparator.comparing中定义排序反转 在Stream中定义排序反转 null 值的判断 元素是 null 的笨拙实现 排序条件的字段是 null 文末总结 我们在系统开发过程中,对数据排序是很常见的场景.一般来说,我们可以采

  • Python实现斐波那契数列的多种写法总结

    目录 1.for循环 2.while循环 3.使用递归 4.递归+for循环 5.递归+while循环 6.递归+定义函数+for循环 7.指定列表 趣方程求解 pandas 每日一练 斐波那契数列——经典例子,永不过时!!! 1.for循环 def fibonacci1(n): a, b = 0, 1 for i in range(n): a, b = b, a+b print(a) fibonacci1(3) 或 def fib1(w): a, b = 1, 1 for i in range

随机推荐