在 Java 的世界里,迭代器模式就像是一个贴心的导游,专门负责带我们轻松游览各种数据集合。今天,咱就来唠唠这个迭代器模式的高阶使用,保证让你收获满满,代码水平 “蹭蹭” 往上涨!
一、基础回顾:迭代器模式是啥玩意儿?
简单来说,迭代器模式就像是给数据集合配上了一个导航仪。它能让我们在不了解集合内部结构的情况下,轻松地遍历其中的元素。就好比你去一个超大型迷宫旅游,不需要知道迷宫的具体构造,只要跟着导游(迭代器)走,就能把每个角落都逛到。
在 Java 中,我们常用的 ArrayList、LinkedList 等集合类都已经内置了迭代器。比如这样遍历 ArrayList:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class IteratorBasicDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("苹果");
list.add("香蕉");
list.add("橘子");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String fruit = iterator.next();
System.out.println(fruit);
}
}
}
这就是迭代器模式的基本操作,是不是超级简单?但这只是个 “开胃菜”,高阶玩法还在后面呢!
二、高阶玩法一:自定义迭代器
有时候,内置的迭代器可能无法满足我们的特殊需求。这时候,就该自定义迭代器闪亮登场啦!假设我们有一个存储学生成绩的数组,我们想要自定义一个迭代器,只遍历成绩大于 90 分的学生。
class HighScoreIterator implements Iterator<Integer> {
private int[] scores;
private int index = 0;
public HighScoreIterator(int[] scores) {
this.scores = scores;
}
@Override
public boolean hasNext() {
while (index < scores.length) {
if (scores[index] > 90) {
return true;
}
index++;
}
return false;
}
@Override
public Integer next() {
if (hasNext()) {
return scores[index++];
}
return null;
}
}
然后就可以像这样使用我们自定义的迭代器:
public class CustomIteratorDemo {
public static void main(String[] args) {
int[] scores = {85, 92, 95, 88, 98};
HighScoreIterator iterator = new HighScoreIterator(scores);
while (iterator.hasNext()) {
System.out.println("高分学生成绩:" + iterator.next());
}
}
}
这样,我们就轻松地实现了自定义条件的迭代,是不是很酷炫?
三、高阶玩法二:迭代器的嵌套使用
当我们面对多维数据结构时,迭代器的嵌套使用就派上大用场了。想象一下,我们有一个班级的学生信息,每个学生又有好几门课程的成绩。这时候,我们可以用外层迭代器遍历学生,内层迭代器遍历每个学生的课程成绩。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
class Student {
private String name;
private List<Integer> scores;
public Student(String name, List<Integer> scores) {
this.name = name;
this.scores = scores;
}
public Iterator<Integer> getScoreIterator() {
return scores.iterator();
}
}
public class NestedIteratorDemo {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
List<Integer> scores1 = new ArrayList<>();
scores1.add(90);
scores1.add(88);
students.add(new Student("张三", scores1));
List<Integer> scores2 = new ArrayList<>();
scores2.add(95);
scores2.add(92);
students.add(new Student("李四", scores2));
Iterator<Student> studentIterator = students.iterator();
while (studentIterator.hasNext()) {
Student student = studentIterator.next();
System.out.println(student.name + "的成绩:");
Iterator<Integer> scoreIterator = student.getScoreIterator();
while (scoreIterator.hasNext()) {
System.out.println(scoreIterator.next());
}
}
}
}
通过这种嵌套迭代器的方式,我们可以优雅地处理复杂的数据结构,就像剥洋葱一样,一层一层轻松搞定。
四、高阶玩法三:迭代器与 Lambda 表达式结合
Java 8 的 Lambda 表达式可是个 “神器”,和迭代器结合起来使用更是如虎添翼。比如,我们想要对一个集合中的元素进行某种操作并打印结果,使用 Lambda 表达式和迭代器可以这样写:
import java.util.ArrayList;
import java.util.List;
public class IteratorLambdaDemo {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.forEach(num -> System.out.println("数字的平方:" + num * num));
}
}
这里的 forEach 方法内部其实就是使用了迭代器,结合 Lambda 表达式,让代码变得简洁又高效,看起来超酷!
迭代器模式在 Java 中的高阶使用可不止这些哦!它就像一个宝藏,还有很多隐藏的技能等待我们去挖掘。希望大家在实际开发中多去尝试,让代码变得更加优雅和高效。下次再和大家分享更多 Java 的有趣知识,敬请期待!