使用lambda表达式对数组进行排序 您所在的位置:网站首页 java对数组进行升序排序怎么操作 使用lambda表达式对数组进行排序

使用lambda表达式对数组进行排序

2024-07-06 23:19| 来源: 网络整理| 查看: 265

最近做题,总是看到大佬们使用lambda表达式秀操作,之前一次周赛中,我疯狂排序hhh大佬一行代码5555~

什么是lambda表达式?

Java Lambda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法。 实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过invokedynamic指令来实现Lambda表达式的。

可查看教程:lambda表达式

Lambda 表达式可用于匿名内部类的简化写法。 匿名内部类中最关键的内容是方法的参数,方法体,以及返回值,而在 Lambda 表达式中,关注的就是这三个关键的东西。

Lambda 表达式的标准格式:

(参数类型 参数名) -> { 方法体; return 返回值; }

格式解释:

小括号中的参数和之前方法的参数写法一样,可以写任意个参数,如果多个参数,要使用逗号隔开。 -> 是一个运算符,表示指向性动作。 大括号中的方法体以及 return 返回值的写法和之前方法的大括号中的写法一样。

Lambda 表达式是函数式编程思想。 函数式编程:可推导,就是可省略。

因为在 Thread 构造方法中需要 Runnable 类型的参数,所以可以省略 new Runnable。 因为 Runnable 中的只有一个抽象方法 run,所以重写的必然是这个 run 方法,所以可以省略 run 方法的声明部分(public void run)

Lambda 表达式可以省略面向对象中的一些条条框框,让我们只关注最核心的内容。

Lambda 表达式的省略规则:

小括号中的参数类型可以省略。如果小括号中只有一个参数,那么可以省略小括号。如果大括号中只有一条语句,那么可以省略大括号,return,分号。

Lambda 使用条件

Lambda 表达式的使用前提: 必须有接口(不能是抽象类),接口中有且仅有一个需要被重写的抽象方法。 必须支持上下文推导,要能够推导出来 Lambda 表达式表示的是哪个接口中的内容。 可以使用接口当做参数,然后传递 Lambda 表达式(常用),也可以将 Lambda 表达式赋值给一个接口类型的变量。

lambda表达式用于数组的排序

lambda表达式有很多用途,这里重点查了一下用于排序。 从菜鸟教程看到了几种用法:(偷师一波)

String[] players = {"Rafael Nadal", "Novak Djokovic", "Stanislas Wawrinka", "David Ferrer", "Roger Federer", "Andy Murray", "Tomas Berdych", "Juan Martin Del Potro", "Richard Gasquet", "John Isner"}; // 1.1 使用匿名内部类根据 name 排序 players Arrays.sort(players, new Comparator() { @Override public int compare(String s1, String s2) { return (s1.compareTo(s2)); } });

// 1.2 使用 lambda expression 排序 players

Comparator sortByName = (String s1, String s2) -> (s1.compareTo(s2)); Arrays.sort(players, sortByName);

// 1.3 也可以采用如下形式:

Arrays.sort(players, (String s1, String s2) -> (s1.compareTo(s2)));

其他的排序如下所示。 和上面的示例一样,代码分别通过匿名内部类和一些lambda表达式来实现Comparator :

// 1.1 使用匿名内部类根据 surname 排序 players

Arrays.sort(players, new Comparator() { @Override public int compare(String s1, String s2) { return (s1.substring(s1.indexOf(" ")).compareTo(s2.substring(s2.indexOf(" ")))); } });

// 1.2 使用 lambda expression 排序,根据 surname

Comparator sortBySurname = (String s1, String s2) -> ( s1.substring(s1.indexOf(" ")).compareTo( s2.substring(s2.indexOf(" ")) ) ); Arrays.sort(players, sortBySurname);

// 1.3 或者这样,

Arrays.sort(players, (String s1, String s2) -> ( s1.substring(s1.indexOf(" ")).compareTo( s2.substring(s2.indexOf(" ")) ) ) );

// 2.1 使用匿名内部类根据 name lenght 排序 players

Arrays.sort(players, new Comparator() { @Override public int compare(String s1, String s2) { return (s1.length() - s2.length()); } });

// 2.2 使用 lambda expression 排序,根据 name lenght

Comparator sortByNameLenght = (String s1, String s2) -> (s1.length() - s2.length()); Arrays.sort(players, sortByNameLenght);

// 2.3 or this

Arrays.sort(players, (String s1, String s2) -> (s1.length() - s2.length()));

// 3.1 使用匿名内部类排序 players, 根据最后一个字母

Arrays.sort(players, new Comparator() { @Override public int compare(String s1, String s2) { return (s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1)); } });

// 3.2 使用 lambda expression 排序,根据最后一个字母

Comparator sortByLastLetter = (String s1, String s2) -> (s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1)); Arrays.sort(players, sortByLastLetter);

// 3.3 or this

Arrays.sort(players, (String s1, String s2) -> (s1.charAt(s1.length() - 1) - s2.charAt(s2.length() - 1)));


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有