题目如下:
实现List和Map数据的转换。具体要求如下:
【功能1】:定义方法public void listToMap( ){ }将List中Student元素封装到Map中
-
使用构造方法Student(int id,String name,int age,String sex )创建多个学生信息并加入List;
-
遍历List,输出每个Student信息;
-
将List中数据放入Map,使用Student的id属性作为key,使用Student对象信息作为value;
-
遍历Map,输出每个Entry的key和value。
【功能2】:定义方法public void mapToList( ){ }将Map中Student映射信息封装到List
-
创建实体类StudentEntry,可以存储Map中每个Entry的信息;
-
使用构造方法Student(int id,String name,int age,String sex )创建多个学生信息,并使用Student的id属性作为key,存入Map;
-
创建List对象,每个元素类型是StudentEntry;
-
将Map中每个Entry信息放入List对象。
【功能3】:说明Comparable接口的作用,并通过分数来对学生进行排序。
个人答案如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class HomeWork {
public static Map<Integer,Student> listToMap(List<Student> l ) {//将List中Student元素封装到Map中
/*1) 使用构造方法Student(int id,String name,int age,String sex )创建多个学生信息并加入List;
2) 遍历List,输出每个Student信息;
3) 将List中数据放入Map,使用Student的id属性作为key,使用Student对象信息作为value;
4) 遍历Map,输出每个Entry的key和value。
*/
//遍历使用通用的接口Iterator迭代器
//回顾:Iterator迭代器有两个最重要的方法:.next 和 .hasNext
System.out.println("List中原有的数据如下:");
for (Iterator<Student> iter = l.iterator();iter.hasNext();) {
System.out.println(iter.next());
}
System.out.println("重排后数据如下:");
Collections.sort(l, null);
for (Iterator<Student> iter = l.iterator();iter.hasNext();) {
System.out.println(iter.next());
}
Map<Integer,Student> m = new HashMap<>();
//将List中的对象放入Map内
for (int i = 0;i < l.size();i++) {
m.put(l.get(i).id, l.get(i));
System.out.println("ID"+l.get(i).id+"已成功导入");
}
return m;
}
public static List<Entry<Integer,Student>> mapToList(Map<Integer, Student> m) {//将Map中Student映射信息封装到List
/*1) 创建实体类StudentEntry,可以存储Map中每个Entry的信息;
2) 使用构造方法Student(int id,String name,int age,String sex )创建多个学生信息,并使用Student的id属性作为key,存入Map;
3) 创建List对象,每个元素类型是StudentEntry;
4) 将Map中每个Entry信息放入List对象。
*/
//Entry对象使用Set存储
Set<Entry<Integer,Student>> studentEntry = m.entrySet();
List<Entry<Integer,Student>> result = new ArrayList<>();
for(Iterator<Entry<Integer,Student>> iter = studentEntry.iterator();iter.hasNext();) {
result.add(iter.next());
}
return result;
}
public static void main(String[] args) {
Student stu1 = new Student(1001,"张三",18,"男");
Student stu2 = new Student(1002,"李四",20,"男");
Student stu3 = new Student(1003,"lex",19,"女");
Student stu4 = new Student(1004,"王五",17,"男");
List<Student> l = new ArrayList<>();
l.add(stu1);
l.add(stu2);
l.add(stu3);
l.add(stu4);
Map<Integer,Student> m;
m = listToMap(l);
System.out.println("导入Map后的信息如下:");
//遍历Map方法:先取Map的键值KEY,用Set存储
Set<Integer> keySet = m.keySet();
for(Integer key : keySet) {
System.out.println("[key]:"+key+",[value]:"+m.get(key));
}
List<Entry<Integer,Student>> l2 = mapToList(m);
System.out.println("导入List后的信息如下(Entry):");
System.out.println(l2);
}
}
class Student implements Comparable<Student>{
int id;
String name;
int age;
String sex;
@Override
public String toString() {
return "id:"+id+" \tname:"+name+"\tage:"+age+"\tsex:"+sex;
}
public Student() {
}
public Student(int id, String name, int age, String sex) {
super();
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
@Override
public int compareTo(Student o) {//负数:小于 , 0:等于 , 正数:大于
// TODO Auto-generated method stub
//按年龄排序
if (this.age>o.age) {
return 1;
}else if (this.age < o.age) {
return -1;
}else {
return 0;
}
}
}