使用Lambda来简化匿名内部类的使用

		//现在有一个需求,按照长度排序字符串
        String[] names = {"Leoo", "Leo", "Leooo"};
        
        System.out.println("未排序之前:");
        for (String name : names) {
            System.out.println(name);
        }
        
        //常规写法
        Arrays.sort(names, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        });
        
        System.out.println("排序后:");
        for (String name : names) {
            System.out.println(name);
        }
  1. 运行结果
未排序之前:
Leoo
Leo
Leooo
排序后:
Leo
Leoo
Leooo
  1. 或者新建一个比较器,这样可以在别的地方复用
		//新建一个比较器
        Comparator<String> ByLength = new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        };

        //排序
        Arrays.sort(names, ByLength);
  1. 使用Lambda简化
		//使用Lambda简化比较器的书写
        Comparator<String> ByLength = (String o1, String o2) -> o1.length() - o2.length();

        //或者直接在排序中使用
        Arrays.sort(names, (o1, o2) -> o1.length() - o2.length());

方法参考

public class StringOrder {

    /** * 根据字符串长度排序 */
    public static int ByLength(String o1, String o2) {
        return o1.length() - o2.length();
    }

    /** * 根据字典顺序排序 */
    public static int ByZD(String o1, String o2) {
        return o1.compareTo(o2);
    }

    /** * 根据字符串长度排序 但是忽略大小写 */
    public static int ByZDIgnoreCase(String o1, String o2) {
        return o1.compareToIgnoreCase(o2);
    }

}

		Arrays.sort(names, (o1, o2) -> StringOrder.ByLength(o1, o2));
		//使用方法参考
        Arrays.sort(names, StringOrder::ByLength);
        Arrays.sort(names, StringOrder::ByZD);
        Arrays.sort(names, StringOrder::ByZDIgnoreCase);