集合的操作(员工类 第三篇)

来源:互联网 发布:ubuntu查看当前目录 编辑:程序博客网 时间:2024/05/16 08:29
/** * 要求用户输入若干员工信息,格式为: * name,age,gender,salary,hiredate;name,age,gender,salary,hiredate;.... * 例如: * 张三,25,男,5000,2006-02-15;李四,26,女,6000,2007-12-24;... * 然后将每个员工信息解析成Emp对象。并存入到一个List集合中。 * 并对集合排序,然后输出每个员工信息。 *  * 再根据员工的入职时间排序,入职晚的在前,早的在后并输出每个员工的信息。 * @author Xiloer *张三,25,男,5000,2006-02-15;李四,26,女,6000,2007-12-24;莉莉,20,女,8000,2010-03-15;韩磊,30,男,5500,2009-05-24; */

代码如下:

Emp类:

public class Emp implements Comparable<Emp>{private String name;private int age;private String gender;private int salary;private Date hiredate;//入职时间public Emp(String name, int age, String gender, int salary, Date hiredate) {this.name = name;this.age = age;this.gender = gender;this.salary = salary;this.hiredate = hiredate;}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;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getSalary() {return salary;}public void setSalary(int salary) {this.salary = salary;}public Date getHiredate() {return hiredate;}public void setHiredate(Date hiredate) {this.hiredate = hiredate;}//定义toString方法,格式如:姓名:张三,年龄:25,性别:男,薪资:5000,入职时间:2006-02-15@Overridepublic String toString() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return "姓名:"+name+","+"年龄:"+age+","+   "性别:"+gender+","+"薪资:"+salary+","+"入职时间:"+sdf.format(hiredate);}//定义equals方法,要求名字以及年龄相同,则认为内容一致。public boolean equals(Object obj){if(obj == null){return false;}if(obj == this){return true;}if(obj instanceof Emp){Emp emp = (Emp) obj;return this.name.equals(emp.name) && this.age == emp.age;}return false;}//实现Comparable接口,并重写抽象方法comparaTo(),比较规则为年龄小的人小。@Overridepublic int compareTo(Emp o) {//不用Object 接口处有泛型int time = o.age - this.age;return time>0? -1 : 1;//年龄大的排在后面}}
测试类:

public class Test03 {public static void main(String[] args) throws ParseException {Scanner scan = new Scanner(System.in);System.out.println("请输入员工信息:(格式为:name,age,gender,salary,hiredate;name,age)");String input = scan.nextLine().trim();//接收字符串String[] inputArr = input.split(";");List<Emp> list = new ArrayList<Emp>();for(int i=0;i<inputArr.length;i++){String[] everyArr = inputArr[i].split(","); String name = everyArr[0];int age = Integer.parseInt(everyArr[1]);String gender = everyArr[2];int salary = Integer.parseInt(everyArr[3]);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date hiredate = sdf.parse(everyArr[4]);Emp emp = new Emp(name,age,gender,salary,hiredate);list.add(emp);}Collections.sort(list);System.out.println("根据年龄从小到大排序:");for(Emp emp : list){System.out.println(emp.toString());}//再根据员工的入职时间排序,入职晚的在前,早的在后并输出每个员工的信息。System.out.println("根据员工的入职时间排序,入职晚的在前:");Collections.sort(list,new Comparator<Emp>(){@Overridepublic int compare(Emp o1, Emp o2) {//注意:最后才强转long,否则溢出  用第二个对象内容减去第一个对象内容--再三目运算判断long time =  o2.getHiredate().getTime() - o1.getHiredate().getTime();return time>0? 1 : -1;//后入职的返回较大的值}});for(Emp emp : list){System.out.println(emp);}}}
测试结果如下:

请输入员工信息:(格式为:name,age,gender,salary,hiredate;name,age)张三,25,男,5000,2006-02-15;李四,26,女,6000,2007-12-24;莉莉,20,女,8000,2010-03-15;韩磊,30,男,5500,2009-05-24;根据年龄从小到大排序:姓名:莉莉,年龄:20,性别:女,薪资:8000,入职时间:2010-03-15姓名:张三,年龄:25,性别:男,薪资:5000,入职时间:2006-02-15姓名:李四,年龄:26,性别:女,薪资:6000,入职时间:2007-12-24姓名:韩磊,年龄:30,性别:男,薪资:5500,入职时间:2009-05-24根据员工的入职时间排序,入职晚的在前:姓名:莉莉,年龄:20,性别:女,薪资:8000,入职时间:2010-03-15姓名:韩磊,年龄:30,性别:男,薪资:5500,入职时间:2009-05-24姓名:李四,年龄:26,性别:女,薪资:6000,入职时间:2007-12-24姓名:张三,年龄:25,性别:男,薪资:5000,入职时间:2006-02-15




0 0
原创粉丝点击