gpt4 book ai didi

java - 如何分离迭代器的元素?

转载 作者:行者123 更新时间:2023-12-01 14:23:26 24 4
gpt4 key购买 nike

我想随机生成时间和数字。这里我使用hashmap生成一些记录。现在我可以生成数字,但无法将它们分开。我必须分隔这些值,以便我可以在数据库中设置它们..

这是我的代码...

public class DateTimePopulation {

private Random rand = new Random();
private Date theDay;
private String callDuration = null;
private String endDay = null;
SimpleDateFormat mytimeFormat = new SimpleDateFormat("HH:mm:ss");

public static void main(String[] args) throws ParseException {
DateTimePopulation d = new DateTimePopulation();
for (int i = 1; i <= 3; i++) {
Map rec = d.getRecord();
for (int j = 0; j < rec.size(); j++) {
Collection c = rec.values();
Iterator itr = c.iterator();
int count=0;
while (itr.hasNext()) {
Object element=itr.next();
System.out.println(element);
}
System.out.println();
}
}
}

private Map getRecord() {
Map<String, Object> rec = new LinkedHashMap<String, Object>();
Date startDate;
try {
startDate = getRandStartDate();
rec.put("StartTime", startDate);

int start = 7200000, end = 0;
int duration = getRandDuration(start, end);
rec.put("Duration", duration);

Date endDate = getRandEndDate(startDate, duration);
rec.put("EndTime", endDate);

} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return rec;
}



private Date getRandEndDate(Date startDate, int duration) {
Random r = new Random();
int ranSec = r.nextInt(duration - 0) + 0;
return new Date(startDate.getTime() + ranSec * 1000);
}

private int getRandDuration(int High, int Low) {
Random r = new Random();
return r.nextInt(High - Low) + Low;
}

private Date getRandStartDate() throws ParseException {
Date theDay = new SimpleDateFormat("yyyyMMdd hh:mm:ss")
.parse("20130101 00:00:00");
int High = 60 * 60 * 24 * 30 * 6;
Random r = new Random();
int Low = 10;
int R = r.nextInt(High - Low) + Low;

return new Date(theDay.getTime() + R * 1000);
}

}

这是输出。我展示了 2 套。我必须将时间、持续时间等分开。

Tue Jan 08 11:01:57 IST 2013
6074479
Fri Jan 18 12:56:24 IST 2013

最佳答案

首先,您的设计一开始就很奇怪 - 为什么您要在实例上调用 getRecord() ,而它不会对您调用它的对象的字段执行任何操作?

此外,当您迭代 map 时,您实际上是在同一个 map 上迭代 3 次:

for (int j = 0; j < rec.size(); j++) {
Collection c = rec.values();
Iterator itr = c.iterator();
int count=0;
while (itr.hasNext()) {
Object element=itr.next();
System.out.println(element);
}
System.out.println();
}

你的外循环在这里毫无意义 - 毕竟你从来没有使用过j。如果您确实愿意,我可能会迭代条目而不是值 - 然后您可以打印出与每个值对应的键。

接下来,我鼓励您完全不要使用 map - 创建一个单独的类型,其中包含开始时间、持续时间和结束时间字段。这将非常简单地解决问题。

接下来,如果您仍然想使用 map ,请停止使用原始类型 - 它会让您的生活更简单。

最后,如果您确实仍然想使用 map ,那么您已经知道键,因此没有必要对其进行迭代:

System.out.println("Start: " + map.get("StartTime");
System.out.println("Duration: " + map.get("Duration");
System.out.println("End: " + map.get("EndTime");

基本上,我强烈建议您退一步并重新审视您的整个设计。您可能会发现从头开始比更改现有代码更好。

关于java - 如何分离迭代器的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17359987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com