在涉及到数组, 集合等这些地方经常会需要用到排序算法, 在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比较器)...相关推荐

  1. vue中,scss样式的三种写法——当前页面直接定义、@import引入样式、main.js引入公共样式 deep和important的写法

    vue中,scss样式的三种写法--当前页面直接定义.@import引入样式.main.js引入公共样式 & deep和important的写法 1.安装scss # 安装node-sass ...

  2. php 三色排序,一个数组中只有0,1,2三种元素,要求对这样的数组进行排序,一个数组中只有0,1,2三种元素,要求对这样的数组进行排序,第2章 排序 | | 第17节 三色排序练习题...

    1.思路: 1.1思路1: 第一眼看到这样的题目,会举得非常简单,只需要两次遍历数组就可以完成了.第一次遍历,扫描数组中的元素,每次遇到0则count0++,遇到1则count1++,遇到2则coun ...

  3. 计算机图形学第一次上机——中点线算法和中点圆算法

    计算机图形学第一次上机实验 课程实验报告 目录 计算机图形学第一次上机实验 课程实验报告 一.实验目的 二.实验环境 三.实验内容 1.中点线算法 2.中点圆算法 四.实验心得 附录:程序源代码 一. ...

  4. Redis中五大基本数据类型和三种特殊数据类型详解

    目录 介绍 概念 基本命令 redis是单线程的 五大基本数据类型 String 命令 应用场景 List 命令 应用场景 Set 命令 应用场景 Hash 命令 应用场景 Zset 命令 应用场景 ...

  5. python csv库,Python 中导入csv数据的三种方法

    Python 中导入csv数据的三种方法,具体内容如下所示: 1.通过标准的Python库导入CSV文件: Python提供了一个标准的类库CSV文件.这个类库中的reader()函数用来导入CSV文 ...

  6. [转载]二叉树先序、中序、后序三种遍历的非递归算法

    本贴给出二叉树先序.中序.后序三种遍历的非递归算法,此三个算法可视为标准算法. 1.先序遍历非递归算法 #define maxsize 100 typedef struct { Bitree Elem ...

  7. 计算机启动应用程序的方法,excel的程序_Excel2010中启动应用程序的三种方法

    使用Excel时,需要先启动应用程序,怎么去进行操作启动它?今天,学习啦小编就教大家在Excel2010中启动应用程序的三种方法. Excel2010中启动应用程序的三种步骤如下: 1.开始菜单 在桌 ...

  8. Java中OutOfMemoryError(内存溢出)的三种情况及解决办法

    Java中OutOfMemoryError(内存溢出)的三种情况及解决办法 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各 ...

  9. Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...

    Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法 www.MyException.Cn   发布于:2012-09-15 ...

最新文章

  1. kd-tree理论以及在PCL 中的代码的实现
  2. 浮点数在内存中的存储方式
  3. linux统计日志,Linux一些常使用的统计日志 方法
  4. 享元模式源码解析(jdk+tomcat)
  5. 【双100%提交】剑指 Offer 09. 用两个栈实现队列
  6. MIT最新深度学习入门公开课
  7. 【基础】模型评估指标 AUC 和 ROC,这是我看到的最透彻的讲解
  8. android file hascode,AndroidStudio集成Lombok
  9. 凸优化问题,凸二次规划问题QP,凸函数
  10. 黄金矿工~java小游戏【内含源码】
  11. 刚体运动部分(坐标、旋转、平移、李群和李代数)
  12. 一枚笑脸 emoji,估值 20 亿美元!这个开源项目有点强...
  13. 互联网巨头入局汽车后市场,VIN码识别迎利好
  14. 人工智能与智能的异同
  15. 文献阅读1:基于旋量理论的串联机器人运动特性研究现状
  16. 跳跃游戏(jump-game)图解
  17. SRAM/DRAM优缺点对比
  18. 【分享】5S管理专员测试试题
  19. 有车一族 教你如何防止被电子眼拍到
  20. python 3.x版本的默认编码是_[python] python3.X编码格式问题

热门文章

  1. Linux Platform Device and Driver
  2. ListMapSet的操作和遍历
  3. .net运行项目的几种形式
  4. c#获取电脑硬件信息参数说明(硬盘篇 Win32_DiskDrive)
  5. [DP]【最大全零矩阵】【2015.7.9TEST】E
  6. Linux初学 - SSH
  7. ios之UIImageView
  8. 将今天写进历史,即可得出现在的世界是数字的
  9. Silverlight杂记-控件相关
  10. 卫星通信频段:C频段、Ku频段和Ka频段