java - 如何找出抽象列表中的对象?
问题描述
我有一个名为会话的抽象类。讲座和教程延长了会议。然后我有一个名为注册的课程,其中包含课程列表(讲座和教程)。如何遍历 Enrollment 中的会话列表并仅从会话列表中返回讲座列表?
我的下一个问题是我是否应该存储 2 个列表。一个讲座列表和一个教程列表,而不是 1 个会话列表?这是因为会话列表对我来说毫无用处,我每次都必须遍历它以获取有关讲座和教程的信息。有没有办法让我得到所有的讲座对象?我是java新手。
public class Enrolment {
private List<Session> sessions;
public Enrolment() {
this.sessions = new ArrayList<>();
}
public addSession(Session session) {
this.sessions.add(session);
}
}
public class Session {
private int time;
public Session(int time) {
this.time = time;
}
}
public class Lecture extends Session {
private String lecturer;
public Lecture(int time, String lecturer) {
super(time);
this.lecturer = lecturer;
}
}
public class Tutorial extends Session {
private String tutor;
private int tutorScore;
public Tutorial(int time, String tutor, int tutorScore) {
super(time);
this.tutor = tutor;
this.tutorScore = tutorScore;
}
}
public class test {
public static void main(String[] args) {
Enrolment newEnrolment = new Enrolment();
Lecture morningLec = new Lecture(900, "Dr. Mike");
newEnrolment.addSession(morningLec);
Tutorial afternoonTut = new Tutorial(1400, "John Smith", 3);
newEnrolment.addSession(afternoonTut);
Lecture middayLec = new Lecture(1200, "Mr. Micheals");
newEnrolment.addSession(middayLec);
Tutorial NightTut = new Tutorial(1900, "Harry Pauls", 4);
newEnrolment.addSession(NightTut);
}
}
解决方案
流式传输sessions
列表并用于instanceof
过滤Lectures
类型对象
List<Lecture> l = sessions.stream()
.filter(Lecture.class::isInstance)
.map(Lecture.class::cast)
.collect(Collectors.toList());
通过使用for
循环为每种类型使用两个不同的列表
List<Lecture> l = new ArrayList<>();
List<Tutorial> t = new ArrayList<>();
for (Session s : sessions) {
if (s instanceof Lecture) {
l.add((Lecture) s);
}
else if(s instanceof Tutorial) {
t.add((Tutorial) s);
}
}
推荐阅读
- reactjs - 如果 React-Error-Boundary 从错误中恢复,如何编写测试?
- javascript - CSS高级悬停效果?
- c# - 为什么 Main 方法不运行(c#)?
- javascript - 如何修复:TypeError: e.wpcf7.parent.querySelector(...) is null for WordPress Contact form 7
- javascript - 如何在链接元素的 onClick 触发前调用函数 Next.js
- android - StrictMode 策略违规:android.os.strictmode.NonSdkApiUsedViolation: Lcom/android/org/conscrypt/ConscryptEngineSocket;->setHostname(
- hdf5 - AttributeError:“数据集”对象没有属性“值”
- flutter - Flutter:如何设置后台定时器
- r - 拉普拉斯矩阵,解决电阻网格问题
- node.js - 使用 nodejs 阅读和发布 pdf