这篇文章主要和大家分享一下Java匿名内部类和Lambda(-)的多种写法,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以先看一下
引入: 最近使用到 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内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:Java匿名内部类和Lambda(->) 的多种写法总结
基础教程推荐
猜你喜欢
- Java并发编程进阶之线程控制篇 2023-03-07
- springboot自定义starter方法及注解实例 2023-03-31
- java实现多人聊天系统 2023-05-19
- Java实现查找文件和替换文件内容 2023-04-06
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- Java数据结构之对象比较详解 2023-03-07
- java基础知识之FileInputStream流的使用 2023-08-11
- Java实现线程插队的示例代码 2022-09-03
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- Java文件管理操作的知识点整理 2023-05-19