通过习题详细演示
- 三大类遍历方式:
- 1.键找值 形式
- 2.键值对 形式
- 3.Lambda表达式 形式
学员应聘至外企工作,每个学员都会有一个英文名称,对应该学员对象。
请实现通过英文名称,获得该学员对象的详细信息
学员属性包括姓名以及性别
package ch02.pptdemo.test02;
public class Student {
private String nameEnglish;
private String nameChinese;
private String sex;
public Student() {
}
public Student(String nameEnglish, String nameChinese, String sex) {
this.nameEnglish = nameEnglish;
this.nameChinese = nameChinese;
this.sex = sex;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getNameChinese() {
return nameChinese;
}
public void setNameChinese(String nameChinese) {
this.nameChinese = nameChinese;
}
public String getNameEnglish() {
return nameEnglish;
}
public void setNameEnglish(String nameEnglish) {
this.nameEnglish = nameEnglish;
}
@Override
public String toString() {
return "Student{" +
"nameEnglish='" + nameEnglish + '\'' +
", nameChinese='" + nameChinese + '\'' +
", sex='" + sex + '\'' +
'}';
}
}
package ch02.pptdemo.test02;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
public class StudentTest {
public static void main(String[] args) {
/*
学员应聘至外企工作,每个学员都会有一个英文名称,对应该学员对象。
请实现通过英文名称,获得该学员对象的详细信息
学员属性包括姓名以及性别
*/
//创建集合的对象
Map<String,Student> map =new HashMap<>();
// // 创建学生对象 并 添加到集合中
Student stu1 = new Student("Jack","李明","男");
Student stu2 = new Student("Tom","李华","女");
map.put("Jack",stu1);
map.put("Tom",stu2);
// ★★★★ 1.键找值 ★★★★★★★★★
// 理解为:创建一个单列集合存放键
Set<String> keys = map.keySet();
// 1.1增强for循环 keys
for (String key : keys) {
// System.out.println(key);
// 获取每一个键对应的值,这里的值为学生对象
Student stuValue = map.get(key);
System.out.println(key+"对应的学员是"+stuValue.getNameChinese()+","+stuValue.getSex());
}
// 1.2.迭代器循环 keys
Iterator<String> it = keys.iterator();
while (it.hasNext()){
// 获取每一个键
String key = it.next();
// 获取每一个键对应的值,这里的值为学生对象
Student stuValue = map.get(key);
System.out.println(key+"对应的学员是"+stuValue.getNameChinese()+","+stuValue.getSex());
}
// 1.3.Lambda表达式遍历 keys
keys.forEach(new Consumer<String>() {
@Override
public void accept(String key) {
// 获取每一个键对应的值,这里的值为学生对象
Student stuValue = map.get(key);
System.out.println(key+"对应的学员是"+stuValue.getNameChinese()+","+stuValue.getSex());
}
});
// ★★★★ 2.键值对 ★★★★★★★
// 通过一个方法获取所有的键值对对象,并将键值对放入一个集合
Set<Map.Entry<String, Student>> entries = map.entrySet();
// 2.1 增强for遍历 entries
for (Map.Entry<String, Student> entry : entries) {
// System.out.println(entry);
// 获取键值对的键
String key = entry.getKey();
// 获取键值对的值
Student valueStu = entry.getValue();
System.out.println(key+"对应的学员"+valueStu.getNameChinese()+","+valueStu.getSex());
}
// 2.2迭代器遍历 entries
Iterator<Map.Entry<String, Student>> it1 = entries.iterator();
while (it1.hasNext()){
Map.Entry<String, Student> next = it1.next();
// 获取键值对的键
String key = next.getKey();
// 获取键值对的值
Student valueStu = next.getValue();
System.out.println(key+"对应的学员"+valueStu.getNameChinese()+","+valueStu.getSex());
}
// 2.3Lambda表达式遍历 entries
entries.forEach(new Consumer<Map.Entry<String, Student>>() {
@Override
public void accept(Map.Entry<String, Student> stringStudentEntry) {
String key = stringStudentEntry.getKey();
Student valueStu = stringStudentEntry.getValue();
System.out.println(key+"对应的学员"+valueStu.getNameChinese()+","+valueStu.getSex());
}
});
System.out.println();
// // ★★★★ 3.Lambda表达式遍历 ★★★★★★★
map.forEach(new BiConsumer<String, Student>() {
@Override
public void accept(String s, Student stu) {
System.out.println(s+"=>"+stu.getNameChinese());
}
});
// main ending.....
}
}