2017-09-08 9 views
1

次のように、ローカル日付時間型として書式設定された要素の数を含むリストがあります。リストの最初の値はリストの2番目の値から前にある各要素のそれぞれを識別する方法はリスト内の次の要素から始まる前

List(2017-06-25T00:00, 2017-06-25T00:05:13, 2017-06-25T00:11:11, 2017-06-25T00:17:39, 2017-06-25T00:24:44, 2017-06-25T00:32:33, 2017-06-25T00:41:11, 2017-06-25T01:01:03) 

私はリストのそれぞれとすべての要素を確認したいが、次のelement.As例から前です。賢明に私はlist.Canの中のすべての要素をチェックしたいと思います。ここで

+0

「要素全体」とはどういう意味ですか? – Sergey

+0

リストの各要素を順番にチェックしたいのですが、次の順序よりも前の日付です –

答えて

4

を比較isBeforeというメソッドを持っていることを前提としていよくフォーマットされた日付文字列のListが年代順にすべてある場合。

import java.time.LocalDateTime 

val dates: List[String] = List("2017-06-25T00:00" 
           , "2017-06-25T00:05:13" 
           // etc. 
           , "2017-06-25T01:01:03" 
          ) 

dates.iterator 
    .map(LocalDateTime.parse) 
    .sliding(2) 
    .forall(x => x(0) isBefore x(1)) // returns true/false 

を日付文字列はすなわち、レイジー解析することができるように.iteratorが含まれている場合は最初の日付の1 Iリスト内の後続の日付はまったく解析される必要はありません。

-1

がシーケンスの日付の各文字列は、次のより早いことを確認するための方法である(それはあなたがこれをテストする2

これらの文字列の
@tailrec 
def isMonotouslyIncreasing(seq: Seq[String]): Boolean = { 
    if(seq.size <= 1) true 
    else if(isBefore(seq(0), seq(1))) isMonotouslyIncreasing(seq.tail) 
    else false 
} 
+0

これはあまり効率的ではありません。 'seq.drop(1)'は一般的に 'O(n)'なので、あなたの解は 'O(n²)'になります。 – Aivean

+0

ここでは、String型のデータシーケンスを渡します。しかし、LocalDateTime型のデータのための私の要求 –

+0

@Aivean私は 'drop(1)'を 'tail(' O(1) ')に変更してランタイムの複雑さを' O(N) 'にしました – Simon

関連する問題