compare能不能吧把各种类型放一起

来源:5-1 通过Collections实现集合排序

胖胖的工程师

2022-08-30 23:41:20

按照老师讲的,list的compare要么集合是数字o1,o2相减进行比较,要么自定义或者是string使用compareto,能不能把这几个整合到一个类。
我试了传入object,转成integer可以o1-o2,但是转成string不能用compareto比较,求指导
写回答

1回答

好帮手慕小蓝

2022-08-31

同学你好,同学是指在一个集合中,既要使用int等基本类型进行排序,也要使用String等对象类型进行排序吗?

如果是,同学可以参考如下代码和注释:

public class Student {
	private String name;
	private int age;

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

	public Student() {
		super();
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}

	@Override
	public int hashCode() {
		return Objects.hash(age, name);
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		return age == other.age && Objects.equals(name, other.name);
	}

}
public class StudentCompartor implements Comparator<Student> {
	/*
	 * 为学生信息进行排序: 1.根据姓名进行排序 2.如果名字相同则根据年龄排序
	 */
	@Override
	public int compare(Student o1, Student o2) {
		//为了减少方法调用的次数,将学生信息进行转存
		String name1 = o1.getName();
		String name2 = o2.getName();
		int age1 = o1.getAge();
		int age2 = o2.getAge();
		//获取姓名和年龄的对比
		int nameCompare = name1.compareTo(name2);
		int ageCompare = age1 - age2;
		//根据比较规则进行返回
		if(nameCompare != 0) return nameCompare;
		return ageCompare;
	}

}

祝学习愉快~

0

0 学习 · 9886 问题

查看课程