实现List和Map数据的转换。具体要求如下:
功能1:定义方法public void listToMap( ){ }将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
功能2:定义方法public void mapToList( ){ }将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对象
功能一,二、代码如下:
分析:(功能一)就是在list里面直接new Student,顺便将内容也写进去,然后加强for循环遍历list,从中提取Student的Id作为Map的“键”,将学生信息Student放入“value”,从而实现ListToMap的方法。(功能二)就是在Map里面直接new Student,先将Map转成EntrySet键值对集合,然后加强for循环遍历EntrySet,再将键值对存放到 new StudentEntry()构造方法中,在该类中定义一个一样的Map成员变量;再直接定义一个ArrayList集合,直接将StudentEntry类对象添加进去即可
测试类代码:
public class Test1 {
public static void main(String[] args) {
// listToMap();
mapToList();
}
public static void mapToList() {
HashMap<Integer, Student> map1 = new HashMap<>();
map1.put(1001, new Student(1001, "a1", 18, "男"));
map1.put(1002, new Student(1002, "a2", 19, "女"));
map1.put(1003, new Student(1003, "a3", 12, "男"));
map1.put(1008, new Student(1008, "a8", 16, "女"));
map1.put(1004, new Student(1004, "a4", 10, "男"));
//创建一个List集合
ArrayList<StudentEntry> studentEntries = new ArrayList<>();
//遍历map集合得到每个学生的entry
Set<Map.Entry<Integer, Student>> entries = map1.entrySet();
for (Map.Entry<Integer, Student> entry : entries) {
StudentEntry studentEntry = new StudentEntry(entry);
studentEntries.add(studentEntry);
}
//遍历List集合,输出每个键值对的键和值
for (StudentEntry studentEntry : studentEntries) {
Map.Entry<Integer, Student> entry = studentEntry.getEntry();
Integer id = entry.getKey();
Student stu = entry.getValue();
System.out.println(id + "-" + stu);
}
}
public static void listToMap() {
//创建一个List集合
ArrayList<Student> list1 = new ArrayList<>();
list1.add(new Student(1001, "a1", 18, "男"));
list1.add(new Student(1002, "a2", 19, "女"));
list1.add(new Student(1003, "a3", 12, "男"));
list1.add(new Student(1008, "a8", 16, "女"));
list1.add(new Student(1004, "a4", 10, "男"));
//2) 遍历List ,输出每个Student信息
for (Student student : list1) {
System.out.println(student);
}
//3) 将List中数据放入Map ,使用Student的id属性作为key ,使用Student对象 信息作为value
HashMap<Integer, Student> map1 = new HashMap<>();
for (Student student : list1) {
int id = student.getId();
map1.put(id, student);
}
//4) 遍历Map ,输出每个Entry的key和value
Set<Map.Entry<Integer, Student>> entries = map1.entrySet();
for (Map.Entry<Integer, Student> entry : entries) {
Integer id = entry.getKey();
Student stu = entry.getValue();
System.out.println(id + "-" + stu);
}
}
}
Student学生类代码:重写toString方法
public class Student {
//int id,String name,int age,String sex
private int id;
private String name;
private int age;
private String sex;
public Student() {
}
public Student(int id, String name, int age, String sex) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
StudentEntry(学生信息键值对)类代码:
分析:要实现List直接写入StudentEntry对象,需要先定义一个Map成员变量,和测试类所写的Map一模一样;
import java.util.Map;
public class StudentEntry {
private Map.Entry<Integer, Student> entry;
public StudentEntry() {
}
public StudentEntry(Map.Entry<Integer, Student> entry) {
this.entry = entry;
}
public Map.Entry<Integer, Student> getEntry() {
return entry;
}
public void setEntry(Map.Entry<Integer, Student> entry) {
this.entry = entry;
}
}