2013-06-28 4 views
0

Я хочу случайным образом генерировать числа и числа. Здесь я использовал 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 
+1

Что вы подразумеваете под «отдельными значениями»? Это действительно непонятно, что вы пытаетесь сделать. Если вы пытаетесь разделить дату и время на свои компоненты даты и времени, это не имеет никакого отношения к итераторам. –

+0

Я хочу хранить Tue Jan 08 11:01:57 IST 2013 в stime, 6074479 в dur и пт Янв 18 12:56:24 IST 2013 в etime ... Выход идет как набор значений, которые i придется отделить .. – BlueShark

ответ

0

Попробуйте generify этот код:

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 DateInterval getRecord() { 
    DateInterval interval = null; 
    try { 
     Date startDate = getRandStartDate(); 
     int start = 7200000, end = 0; 
     int duration = getRandDuration(start, end); 
     Date endDate = getRandEndDate(startDate, duration); 

     interval = new DateInterval(startDate, endDate, duration); 


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

    return interval; 
} 

Смотрите также:

public class DateInterval { 
    private Date startDate; 
    private Date endDate; 
    private int duration; 

    public DateInterval(Date startDate, Date endDate, int duration) { 
     this.startDate = startDate; 
     this.endDate = endDate; 
     this.duration = duration; 
    } 

    public Date getStartDate() { 
     return startDate; 
    } 

    public Date getEndDate() { 
     return endDate; 
    } 

    public int getDuration() { 
     return duration; 
    } 
} 

Я имею в виду, вам не нужна карта для этого pur позе, используйте свою собственную сущность. Если вам необходимо удерживать все объекты в коллекции, используйте Map с DB UUID в качестве ключей или списка.

1

Во-первых, ваш дизайн странно начинать с - почему вы вызываете getRecord() на экземпляр, если он ничего не делает с полями объекта, на который вы его вызываете?

Кроме того, когда вы итерация карту, вы фактически итерация карте же 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, в конце концов. Вероятно, я бы перечислил записи, а не значения, если вы действительно хотите - тогда вы можете распечатать ключ, который идет с каждым значением.

Далее я бы рекомендовал вам не использовать, чтобы использовать карту для этого - создать отдельный тип с полями для времени начала, продолжительности и времени окончания. Это очень упростит ситуацию.

Далее, если вы еще хотите использовать карту, прекратите использовать сырые типы - это упростит вашу жизнь.

Наконец, если вы действительно хотите использовать карту, вы уже знаете, ключи, так что нет никакого смысла в итерации над ним:

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

В принципе, я настоятельно рекомендую вам сделать шаг назад и пересмотреть весь дизайн. Вы можете найти, что лучше начать с нуля, чем изменить существующий код.