JAVA基础面试题-用Collections.sort()方法,通过定制排序比较两个Employee(先按年龄比,年龄相同按照姓名(ASCII码)比),使用Lambda作为参数传递

  • 这是一个比较常见的面试题
package com.sch.jdk8;

public class Employee {

    public String name;
    public int age;

    public Employee(String name, int age) {
        this.age=age;
        this.name=name;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
/*
 * 【Time】2020年8月28日 上午9:52:21
 * 【Function】
 */
public class JDK8Practice {

    /**
     *
     * 调用Collections.sort()方法,通过定制排序比较两个Employee(先按年龄比,年龄相同按照姓名(ASCII码)比),使用Lambda作为参数传递
     */
    public static void main(String[] args) {
    	int compareTo = "张三".compareTo("李四");
    	int compareTo2 = "张三".compareTo("张三");
    	int compareTo3 = "张三".compareTo("张");
    	System.out.println(compareTo+"====");
    	System.out.println(compareTo2+"====");
    	System.out.println(compareTo3+"====");
    	
    	int compareTo4 = "1".compareTo("1");
    	int compareTo5 = "1".compareTo("2");
    	System.out.println(compareTo4+"====");
    	System.out.println(compareTo5+"====");
    	
    	int compareTo6 = "张三".compareTo("李三");
    	System.out.println(compareTo6+"====");
    	
        List<Employee> employeeList = Arrays.asList(new Employee("张三", 12), new Employee("张三", 13), new Employee("李三", 12));
        //sort 方法传入的是一个比较器  Comparator<? super T> c
        Collections.sort(employeeList,(a,b) ->{
            int num = Integer.compare(a.age, b.age);
            int num2 = num==0?a.name.compareTo(b.name):num;
            return  num2;
        });
        for (Employee employee : employeeList) {
            System.out.println(employee.toString());
        }
    }
}
  • 需要特别注意的是这里的compare 方法,它比较的实际是比较首字符的ASCII码值来实现大小的排序的
String s1 = "abc"; 
String s2 = "abcd"; 
String s3 = "abcdfg"; 
String s4 = "1bcdfg"; 
String s5 = "cdfg"; 
System.out.println( s1.compareTo(s2) ); // -1 (前面相等,s1长度小1) 
System.out.println( s1.compareTo(s3) ); // -3 (前面相等,s1长度小3) 
System.out.println( s1.compareTo(s4) ); // 48 ("a"的ASCII码是97,"1"的的ASCII码是49,所以返回48) 
System.out.println( s1.compareTo(s5) ); // -2 ("a"的ASCII码是97,"c"的ASCII码是99,所以返回-2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃早餐的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值