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,排序算法)