2016-04-21 9 views
5

यहाँ के दिन और शुरू के अंत में datetime पर्वतमाला विलय मेरी इनपुट डेटाअगले दिन

है
case class DateRange(sd:DateTime,ed:DateTime) 

val sd1 = DateTime.parse("2016-04-04T20:00:00.000Z") 
val ed1 = DateTime.parse("2016-04-04T23:59:59.999Z") 

val sd2 = DateTime.parse("2016-04-05T00:00:00.000Z") 
val ed2 = DateTime.parse("2016-04-05T05:00:00.000Z") 

val sd3 = DateTime.parse("2016-04-05T20:00:00.000Z") 
val ed3 = DateTime.parse("2016-04-05T23:59:59.999Z") 

val sd4 = DateTime.parse("2016-04-06T00:00:00.000Z") 
val ed4 = DateTime.parse("2016-04-06T05:00:00.000Z") 

val sd5 = DateTime.parse("2016-04-07T10:00:00.000Z") 
val ed5 = DateTime.parse("2016-04-07T15:00:00.000Z") 

val drList = List(DateRange(sd1,ed1),DateRange(sd2,ed2),DateRange(sd3,ed3),DateRange(sd4,ed4),DateRange(sd5,ed5)) 

वांछित आउटपुट मैं देख रहा हूँ

val res = List(DateRange(sd1,ed2),DateRange(sd3,ed4),DateRange(sd5,ed5)) 

यहाँ ed1, ed3 है दिन के अंत और sd1, sd3 संबंधित तिथियों के लिए दिन की शुरुआत है। मैं उस तरह की श्रेणियों को मर्ज करना चाहता हूं क्योंकि हम ऊपर वांछित आउटपुट में देख सकते हैं।

मैं इस

val result = drList.partition(x => x.sd.isEqual(x.sd.withTimeAtStartOfDay()) || x.ed.isEqual(x.ed.withTime(LocalTime.parse("23:59:59"))))) 

लेकिन मर्ज करने के परिणाम के लिए कैसे हो रही है नहीं की तरह विभाजन की कोशिश की। अग्रिम में धन्यवाद।

उत्तर

2

आप अपने परिणाम प्राप्त करने के ज़िप कर सकते हैं:

val res = if(drList.size < 2) 
      { 
       drList 
      } 
      else 
      { 
       drList zip drList.drop(1) map { 
       case (prevRes, nexRes) => 
       if (prevRes.ed.plusMillis(1) == nexRes.sd) prevRes.copy(ed = nexRes.ed) 
       else DateRange(sd1, sd1) 
      } 
      res.filter(x => x.sd != x.ed) 
      } 

यहाँ SD1 किसी और भाग में है और पिछले पर यह को छान के लिए किसी भी datetime है।

संबंधित मुद्दे