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!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值