【发布时间】:2017-05-25 06:42:06
【问题描述】:
在通读嵌套类、嵌套列表和映射之后,我仍然无法确定使用的正确方法,甚至无法确定如何实现这三种方法。
目标:从一个日志文件中跟踪多个服务正常运行时间的统计信息。每个服务状态更改都在一行中,包含 Name、oldStatus、newStatus 和 timeChanged
最后,我想看看这些行之间的时间,但现在我只是想正确地组织数据。
目前,我正在使用一个类,这里是它的构建:
public class Services {
private List<String> AllServices = new ArrayList<String>();
// Initial thought of adding another list here, containing
// the variables, but how would I associate that to the
// service above?
private List<String> ServiceStatus;
public boolean AddService(String name) {
if (!AllServices.contains(name)) {
AllServices.add(name);
return true;
}
return false;
}
public List<String> GetServices() {
return AllServices;
}
}
这一切都很好。当解析器发现一个新服务时,它会将其添加到列表中,因此不会有重复。然后,每次发现服务状态发生变化时,我都会继续添加。我不知道如何为每项服务存储这些数据。
我想我可以把它比作使用唯一标识符为服务名称的数据库,保存每次状态更改、更改内容和时间的记录。一旦我把它记下来,我就可以开始比较两者之间的时间了。
最初想在这里添加另一个列表,包含变量,但我如何将它与每个服务关联?
我考虑过数组,但在 Java 中它们看起来相当静态,因为必须调整它们的大小以添加更多数据。我已经忘记了在 PHP 中解决这个问题的方法,但根据我过去有限的经验,我记得能够构建和使用数组,例如:
statusChanged = myServices["TheService"][i][date];
statusChangedTo = myServices["TheService"][i][new_status];
statusChangedTo = myServices["OtherService"][i][date];
statusChangedTo = myServices["OtherService"][i][new_status];
AllServices
|- TheService
| |- TimeDate
| | - New Status
| | - Old Status
|- OtherService
|- TimeDate
| - New Status
| - Old Status
这使我走上了使用扩展类的道路。我可以有服务和服务。服务将导致只有一个服务列表,但是服务如何再次将其基础变量与父服务类中列出的特定服务相关联?
再一次,在阅读了太多与我想要完成的任务相似但与我不一样的示例后,我觉得我想多了。或者,我只是完全脱离了墙,可能有更好的方法。
【问题讨论】:
-
myServices.get("TheService").newStatus将是一种更“Java 方式”。无论如何,Java 不是 PHP。 -
“它将它添加到列表中,因此没有重复。”在这种情况下使用
HashSet会更好。 -
旁注:阅读有关命名约定的信息。例如,变量名采用驼峰式命名,而不是 AllServices!
-
@user2864740 确实,它不是 PHP。我正在尝试学习 Java 方式并完全同意。我想你最终也用这个暗示回答了我的问题。
-
@GhostCat 我会更深入地研究 HashSet,谢谢。哈!也谢谢你的旁注。 :) 非常感谢。
标签: java arrays list class arraylist