比较基于Date的两个数组列表

时间:2013-07-05 13:41:05

标签: java date arraylist jodatime

我有两个数组LIST,一个字段是Date,另一个是值。第一个LIST A包含时间戳和距离,第二个LIST B包含时间戳和延迟值。我必须将LIST与时间戳进行比较,当时间戳在-1和1之间时,可以匹配相应的distandce和latency。如果未找到匹配,则在延迟中插入-1。有人可以帮助我吗?

列出A

200-Wed Jun 05 11:33:00 CEST 2013
180-Wed Jun 05 11:34:02 CEST 2013
160-Wed Jun 05 11:35:43 CEST 2013
147-Wed Jun 05 11:36:55 CEST 2013
133-Wed Jun 05 11:36:57 CEST 2013
119-Wed Jun 05 11:36:57 CEST 2013
107-Wed Jun 05 11:36:58 CEST 2013    
96-Wed Jun 05 11:36:59 CEST 2013
87-Wed Jun 05 11:37:00 CEST 2013   
79-Wed Jun 05 11:37:02 CEST 2013
73-Wed Jun 05 11:37:02 CEST 2013
67-Wed Jun 05 11:37:03 CEST 2013
62-Wed Jun 05 11:37:04 CEST 2013
58-Wed Jun 05 11:37:05 CEST 2013

列表B

18-Wed Jun 05 11:36:56 CEST 2013
9-Wed Jun 05 11:36:56 CEST 2013
21-Wed Jun 05 11:36:58 CEST 2013
16-Wed Jun 05 11:36:59 CEST 2013
26-Wed Jun 05 11:37:00 CEST 2013
27-Wed Jun 05 11:37:01 CEST 2013
24-Wed Jun 05 11:37:02 CEST 2013
24-Wed Jun 05 11:37:03 CEST 2013
17-Wed Jun 05 11:37:04 CEST 2013
16-Wed Jun 05 11:37:05 CEST 2013
12-Wed Jun 05 11:37:06 CEST 2013

我的最终结果列表应该是

200,-1, Wed Jun 05 11:33:00 CEST 2013
180,-1, Wed Jun 05 11:34:02 CEST 2013
160,-1, Wed Jun 05 11:35:43 CEST 2013
147, 18, Wed Jun 05 11:36:55 CEST 2013
133, 9, Wed Jun 05 11:36:57 CEST 2013
119,21, Wed Jun 05 11:36:57 CEST 2013
107,16, Wed Jun 05 11:36:58 CEST 2013
96, 26, Wed Jun 05 11:36:59 CEST 2013
87, 27, Wed Jun 05 11:37:00 CEST 2013
79, 24, Wed Jun 05 11:37:02 CEST 2013
73, 24, Wed Jun 05 11:37:02 CEST 2013
67, 17, Wed Jun 05 11:37:03 CEST 2013
62, 16, Wed Jun 05 11:37:04 CEST 2013
58, 12, Wed Jun 05 11:37:05 CEST 2013

我的代码如下,但似乎无法正常工作。

public static List<ResultLatency> resultLatency;

for(LatencyData dist : AList) {

  for(LatencyData latency : BList)  {
    DateTime param1  = new DateTime(new Date(dist.getLoggerTimestamp()));
    DateTime param2  = new DateTime(new Date(latency.getLoggerTimestamp()));
    ResultLatency rd = new ResultLatency();
    Seconds sec = Seconds.secondsBetween(param1, param2);
    if(sec.getSeconds() <= 1 && sec.getSeconds() >= -1){
      rd.setDistance(dist.getValue());
      rd.setLatencyValue((int) latency.getKey());
      rd.setloggerTimestamp(dist.getLoggerTimestamp())
      resultLatency.add(rd);
      break;
    }
    else if(sec.getSeconds() > 1) {
      rd.setDistance(dist.getValue());
      rd.setLatencyValue(-1);
      resultLatency.add(rd);
    }

  }
}

我得到的结果是:

200 -1
180 -1
160 -1
147 18
133 9
119 9 -- instead 21
107 21 --instead 16
96 16 -- instead 26
87 16 -- instead 27
79 24
73 24
67 24
62 17
58 16

1 个答案:

答案 0 :(得分:1)

知道为什么它不起作用吗?

无论如何,当distance.remove(i);循环不使用inter.remove(j);for时,我发现您使用了ij。使用正常的for循环,或使用您在高级for循环中为该项目命名的名称。

如果不是那样,那么我也注意到了:

    您提供的代码中未定义
  • resultLatency。它是否在你提供的for循环之外?
  • DateTimeSeconds似乎不是标准的Java类,所以我认为它们是自定义类。也许那里有问题?为了以防万一,你能展示这些课吗?