分配随机 UUID 作为映射键的问题
Problem with assiging random UUID as a map key
我正在制作一个调度(dispatcher?)程序。虽然我设法创建了 "addReport" 方法,但我在显示所有报告(遍历地图)时遇到了问题。我认为每次我尝试添加新元素时,它们都会被替换,因为标识符 (UUID) 是相同的。你怎么看,或者有什么不同?
public class Dispatching {
private String identificator;
private Map<String, Report> reportMap;
public Dispatching() {
this.identificator = UUID.randomUUID().toString();
this.reportMap = new HashMap<>();
}
void addReport(String message, ReportType type) {
reportMap.put(identificator, new Report(type, message, LocalTime.now()));
}
void showReports() {
for (Map.Entry element : reportMap.entrySet()) {
System.out.println("uuid: " + element.getKey().toString()
+ " " + element.getValue().toString());
}
}
}
public class Report {
ReportType reportType;
String reportMessage;
LocalTime reportTime;
public Report(ReportType reportType, String reportMessage, LocalTime reportTime) {
this.reportType = reportType;
this.reportMessage = reportMessage;
this.reportTime = reportTime;
}
@Override
public String toString() {
return "Report{" +
"reportType=" + reportType +
", reportMessage='" + reportMessage + '\'' +
", reportTime=" + reportTime +
'}';
}
}
public class Main {
public static void main(String[] args) {
Dispatching dispatching = new Dispatching();
dispatching.addReport("heeeeelp",ReportType.AMBULANCE);
dispatching.addReport("poliiiice",ReportType.POLICE);
dispatching.addReport("treeee",ReportType.OTHER);
dispatching.showReports();
}
}
public enum ReportType {
AMBULANCE,
POLICE,
FIRE_BRIGADE,
ACCIDENT,
OTHER
}
是的。你是对的。
void addReport(String message, ReportType type) {
reportMap.put(identificator, new Report(type, message, LocalTime.now()));
}
您的 identificator 值对于您添加的每个报告都是相同的。因此,它将覆盖地图中的条目。
您必须为添加的每个报告使用不同的 ID。此 ID 的选择取决于您的用例。也许,您可以在每次插入地图时创建一个 UUID。或者,您可以让每个 Report
都有自己的 ID。
这取决于.. 是否应该为相同的消息和报告类型调用 addReport
在 reportMap
中创建两个条目?如果不是,那么您需要有一个 Report
.
的 ID
您只在构造函数中生成一次 UUID
并在 addReport
中重复使用它,最终,map 将只保留同一键的最后一个条目,因此使用
void addReport(String message, ReportType type) {
reportMap.put(UUID.randomUUID().toString(), new Report(type, message, LocalTime.now()));
}
我正在制作一个调度(dispatcher?)程序。虽然我设法创建了 "addReport" 方法,但我在显示所有报告(遍历地图)时遇到了问题。我认为每次我尝试添加新元素时,它们都会被替换,因为标识符 (UUID) 是相同的。你怎么看,或者有什么不同?
public class Dispatching {
private String identificator;
private Map<String, Report> reportMap;
public Dispatching() {
this.identificator = UUID.randomUUID().toString();
this.reportMap = new HashMap<>();
}
void addReport(String message, ReportType type) {
reportMap.put(identificator, new Report(type, message, LocalTime.now()));
}
void showReports() {
for (Map.Entry element : reportMap.entrySet()) {
System.out.println("uuid: " + element.getKey().toString()
+ " " + element.getValue().toString());
}
}
}
public class Report {
ReportType reportType;
String reportMessage;
LocalTime reportTime;
public Report(ReportType reportType, String reportMessage, LocalTime reportTime) {
this.reportType = reportType;
this.reportMessage = reportMessage;
this.reportTime = reportTime;
}
@Override
public String toString() {
return "Report{" +
"reportType=" + reportType +
", reportMessage='" + reportMessage + '\'' +
", reportTime=" + reportTime +
'}';
}
}
public class Main {
public static void main(String[] args) {
Dispatching dispatching = new Dispatching();
dispatching.addReport("heeeeelp",ReportType.AMBULANCE);
dispatching.addReport("poliiiice",ReportType.POLICE);
dispatching.addReport("treeee",ReportType.OTHER);
dispatching.showReports();
}
}
public enum ReportType {
AMBULANCE,
POLICE,
FIRE_BRIGADE,
ACCIDENT,
OTHER
}
是的。你是对的。
void addReport(String message, ReportType type) {
reportMap.put(identificator, new Report(type, message, LocalTime.now()));
}
您的 identificator 值对于您添加的每个报告都是相同的。因此,它将覆盖地图中的条目。
您必须为添加的每个报告使用不同的 ID。此 ID 的选择取决于您的用例。也许,您可以在每次插入地图时创建一个 UUID。或者,您可以让每个 Report
都有自己的 ID。
这取决于.. 是否应该为相同的消息和报告类型调用 addReport
在 reportMap
中创建两个条目?如果不是,那么您需要有一个 Report
.
您只在构造函数中生成一次 UUID
并在 addReport
中重复使用它,最终,map 将只保留同一键的最后一个条目,因此使用
void addReport(String message, ReportType type) {
reportMap.put(UUID.randomUUID().toString(), new Report(type, message, LocalTime.now()));
}