Lambda表达式之Comparator

public class ComparatorTest {
    public static void main(String[] args) {
        Apple a1 = new Apple("red",120.33);
        Apple a2 = new Apple("red",129.33);
        Apple a3 = new Apple("red",119.33);
        List<Apple> appleList = Arrays.asList(a1,a2,a3);
        test1(appleList);
    }

    /**
     * 方式1 创建类并实现Comparator
     * @param appleList
     */
    public static void test1(List<Apple> appleList){
        appleList.sort(new AppleComparator());
        System.out.println(JSON.toJSONString(appleList));
    }

    /**
     * 方式2 匿名内部类
     * @param appleList
     */
    public static void test2(List<Apple> appleList){
        appleList.sort(new Comparator<Apple>() {
            @Override
            public int compare(Apple o1, Apple o2) {
                return o1.getWeight().compareTo(o2.getWeight());
            }
        });
    }

    /**
     * 方式3 使用Lambda表达式
     * @param appleList
     */
    public static void test3(List<Apple> appleList){
        appleList.sort(((o1, o2) -> o1.getWeight().compareTo(o2.getWeight())));
        System.out.println(JSON.toJSONString(appleList));
    }

    /**
     * 方式4 方法3改进
     */
    public static void test4(List<Apple> appleList){
        //comparing中的参数是Function的实现
        appleList.sort(Comparator.comparing((a -> a.getWeight())));
        System.out.println(JSON.toJSONString(appleList));
    }

    /**
     * 方式5 使用方法引用
     */
    public static void test5(List<Apple> appleList){
        appleList.sort(Comparator.comparing((Apple::getWeight)));
        System.out.println(JSON.toJSONString(appleList));
    }

}
public class AppleComparator implements Comparator<Apple> {

    @Override
    public int compare(Apple o1, Apple o2) {
        return o1.getWeight().compareTo(o2.getWeight());
    }
}
public class Apple {
    private String color;
    private Double weight;

    public Apple() {
    }

    public Apple(String color, Double weight) {
        this.color = color;
        this.weight = weight;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public Double getWeight() {
        return weight;
    }

    public void setWeight(Double weight) {
        this.weight = weight;
    }
}

 

posted @ 2021-04-03 00:56  vijayxu  阅读(364)  评论(0编辑  收藏  举报