List排序进阶
Posted fengyumeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了List排序进阶相关的知识,希望对你有一定的参考价值。
初始代码:
一个Apple类
public class Apple{
String color;
Integer size;
Float weight;
public Apple() {
}
public Apple(String color, Integer size, Float weight) {
this.color = color;
this.size = size;
this.weight = weight;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
public Float getWeight() {
return weight;
}
public void setWeight(Float weight) {
this.weight = weight;
}
@Override
public String toString() {
return "Apple{" +
"weight=" + weight +
", size=" + size +
", color=" + color +
‘}‘;
}
}
主函数 一个赋值一个打印
public static void main(String[] args) {
List<Apple> appleList = new ArrayList<>();
appleList.add(new Apple("red",111,333F));
appleList.add(new Apple("yellow",333,222F));
appleList.add(new Apple("blue",222,888F));
appleList.add(new Apple("black",555,777F));
appleList.add(new Apple("pink",444,111F));
appleList.add(new Apple("green",666,444F));
}
private static <T> void forEach(List<T> list){
for(Object vo : list){
System.out.println(vo.toString());
}
}
第一级:传递代码
Apple类实现Comparator 复写compare
public class Apple implements Comparator<Apple> { String color; Integer size; Float weight; @Override public int compare(Apple o1, Apple o2) { return o1.getSize().compareTo(o2.getSize()); } …… }
appleList.sort(new Apple()); forEach(appleList);
打印结果:
第二级:匿名类
Apple类还原 不用实现Comparator
appleList.sort(new Comparator<Apple>() { @Override public int compare(Apple o1, Apple o2) { return o1.getSize().compareTo(o2.getSize()); } }); forEach(appleList);
打印结果一样
第三级:使用Lambda表达式
一样的传递代码 轻量的写法
appleList.sort((Apple o1,Apple o2) -> o1.getSize().compareTo(o2.getSize()));
forEach(appleList);
能再简洁点吗? 能。
java编译器可以根据lambda的上下文来推断表达式参数的类型,所以写Lambda的时候可以省略参数类型
appleList.sort((o1,o2) -> o1.getSize().compareTo(o2.getSize()));
forEach(appleList);
还能再简洁点吗? 能。
Comparator有一个comparing的静态辅助方法,可以接受一个函数来提取Comparable的键值,并生成一个Comparator对象
appleList.sort(Comparator.comparing((a)->a.getSize()));
forEach(appleList);
第四级:使用方法引用
appleList.sort(Comparator.comparing(Apple::getSize));
forEach(appleList);
方法引用仅仅是涉及单一方法的Lampbda语法糖,使用方式和php中的调用静态方法一样,类::方法。
以上是关于List排序进阶的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情
Java 8 进阶手册(XX):使用 Comparator 对列表进行排序
Java 8 进阶手册(XX):使用 Comparator 对列表进行排序
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段
我的C语言学习进阶之旅解决 Visual Studio 2019 报错:错误 C4996 ‘fscanf‘: This function or variable may be unsafe.(代码片段