java8 lambda 排序算法,Java8中排序算法比较器的三种写法(使用lambda表达式实现Comparator比较器)...
在涉及到数组, 集合等这些地方经常会需要用到排序算法, 在Java中的Collections类中有sort方法, 除了需要传入一个Comparator比较器, 或者需要排序的类实现了Comparable接口;
完整的测试代码附在最后面~
1.使用lambda表达式
我写了3种lambda表达式的写法:
第一种的解释可以看小标题3;
后面两种本质上是一个意思, 传入2个量, 返回比较他们的结果, p在列表的前面, q在列表的后面, 如果希望是升序排列, 就要后面的比前面的大, 就是q.length()-p.length()>0; 如果要降序就是前面的要比后面的大, 就是p.length()-q.length()>0; 也可以直接调用Integer的比较方法, 返回的具体值是两个元素的差值;
Collections.sort(Arrays.asList(s), Comparator.comparingInt(str->(str.length())));
Collections.sort(Arrays.asList(s), (p,q)->{
return Integer.valueOf(p.length()).compareTo(q.length());
});
Collections.sort(Arrays.asList(s), (p,q)->{
return p.length()-q.length();
});
2.自定义Comparator方法(老方法)
我这里写的时候是使用的匿名对象, 自己定义了一个Comparator, 用于比较String类型的比较器, 然后记得覆写Compare方法;
Collections.sort(Arrays.asList(s), new Comparator() {
@Override
public int compare(String o1, String o2) {
return o1.length()-o2.length();
}
});
当然也可以这样写, 不用匿名函数比较繁琐一些:
Comparator comp = new Comparator() {
@Override
public int compare(String o1, String o2) {
return o1.length()-o2.length();
}
};
Collections.sort(Arrays.asList(s), comp);
3.方法引用
使用方法引用, 传入String类的length方法, 其实和上面的第一种lambda表达式是一个意思;
Collections.sort(Arrays.asList(s), Comparator.comparingInt(String::length));
Collections.sort(Arrays.asList(s), Comparator.comparingInt(str->(str.length())));
不过这种方法似乎对于第二比较关键词就没法实现了, 所以还是得用前面两种方法;
最后, 所有的测试代码如下:
import java.util.*;
public class Test {
public static void main(String[] args) {
String[] s = {"GodV","mifengaaa","17shou","Aluka","Gucun","Cpt"};
Collections.sort(Arrays.asList(s), Comparator.comparingInt(String::length));
Collections.sort(Arrays.asList(s), Comparator.comparingInt(str->(str.length())));
Collections.sort(Arrays.asList(s), (p,q)->{
return Integer.valueOf(p.length()).compareTo(q.length());
});
Collections.sort(Arrays.asList(s), (p,q)->{
return p.length()-q.length();
});
Collections.sort(Arrays.asList(s), new Comparator() {
@Override
public int compare(String o1, String o2) {
return o1.length()-o2.length();
}
});
System.out.println();
Arrays.stream(s).forEach(System.out::println);
}
}
嘿嘿, 7911UUPUP!
java8 lambda 排序算法,Java8中排序算法比较器的三种写法(使用lambda表达式实现Comparator比较器)...相关推荐
- vue中,scss样式的三种写法——当前页面直接定义、@import引入样式、main.js引入公共样式 deep和important的写法
vue中,scss样式的三种写法--当前页面直接定义.@import引入样式.main.js引入公共样式 & deep和important的写法 1.安装scss # 安装node-sass ...
- php 三色排序,一个数组中只有0,1,2三种元素,要求对这样的数组进行排序,一个数组中只有0,1,2三种元素,要求对这样的数组进行排序,第2章 排序 | | 第17节 三色排序练习题...
1.思路: 1.1思路1: 第一眼看到这样的题目,会举得非常简单,只需要两次遍历数组就可以完成了.第一次遍历,扫描数组中的元素,每次遇到0则count0++,遇到1则count1++,遇到2则coun ...
- 计算机图形学第一次上机——中点线算法和中点圆算法
计算机图形学第一次上机实验 课程实验报告 目录 计算机图形学第一次上机实验 课程实验报告 一.实验目的 二.实验环境 三.实验内容 1.中点线算法 2.中点圆算法 四.实验心得 附录:程序源代码 一. ...
- Redis中五大基本数据类型和三种特殊数据类型详解
目录 介绍 概念 基本命令 redis是单线程的 五大基本数据类型 String 命令 应用场景 List 命令 应用场景 Set 命令 应用场景 Hash 命令 应用场景 Zset 命令 应用场景 ...
- python csv库,Python 中导入csv数据的三种方法
Python 中导入csv数据的三种方法,具体内容如下所示: 1.通过标准的Python库导入CSV文件: Python提供了一个标准的类库CSV文件.这个类库中的reader()函数用来导入CSV文 ...
- [转载]二叉树先序、中序、后序三种遍历的非递归算法
本贴给出二叉树先序.中序.后序三种遍历的非递归算法,此三个算法可视为标准算法. 1.先序遍历非递归算法 #define maxsize 100 typedef struct { Bitree Elem ...
- 计算机启动应用程序的方法,excel的程序_Excel2010中启动应用程序的三种方法
使用Excel时,需要先启动应用程序,怎么去进行操作启动它?今天,学习啦小编就教大家在Excel2010中启动应用程序的三种方法. Excel2010中启动应用程序的三种步骤如下: 1.开始菜单 在桌 ...
- Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各 ...
- Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...
Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn 发布于:2012-09-15 ...
最新文章
- kd-tree理论以及在PCL 中的代码的实现
- 浮点数在内存中的存储方式
- linux统计日志,Linux一些常使用的统计日志 方法
- 享元模式源码解析(jdk+tomcat)
- 【双100%提交】剑指 Offer 09. 用两个栈实现队列
- MIT最新深度学习入门公开课
- 【基础】模型评估指标 AUC 和 ROC,这是我看到的最透彻的讲解
- android file hascode,AndroidStudio集成Lombok
- 凸优化问题,凸二次规划问题QP,凸函数
- 黄金矿工~java小游戏【内含源码】
- 刚体运动部分(坐标、旋转、平移、李群和李代数)
- 一枚笑脸 emoji,估值 20 亿美元!这个开源项目有点强...
- 互联网巨头入局汽车后市场,VIN码识别迎利好
- 人工智能与智能的异同
- 文献阅读1:基于旋量理论的串联机器人运动特性研究现状
- 跳跃游戏(jump-game)图解
- SRAM/DRAM优缺点对比
- 【分享】5S管理专员测试试题
- 有车一族 教你如何防止被电子眼拍到
- python 3.x版本的默认编码是_[python] python3.X编码格式问题