2017-05-11 3 views
1

Dieser Thread stammt aus meiner vorherigen question. Ich muss Seq[String] erstellen, die Pfade als String-Elemente enthält, aber jetzt muss ich auch die Nummern 7, 8, ...- 22 nach einem Datum hinzufügen. Ich kann auch nicht verwenden LocalDate, wie es in der Antwort auf die oben genannte Frage vorgeschlagen wurde:So automatisieren Sie die Erstellung von String-Elementen mit datetime

path/file_2017-May-1-7 
path/file_2017-May-1-8 
... 
path/file_2017-May-1-22 
path/file_2017-April-30-7 
path/file_2017-April-30-8 
... 
path/file_2017-April-30-22 
.. 

ich für eine flexible Lösung bin auf der Suche. Meine aktuelle Lösung beinhaltet die manuelle Definition von Daten yyyy-MMM-dd. Es ist jedoch nicht effizient, wenn mehr als 2 Daten, z. 10 oder 100. Darüber hinaus filePathsList ist derzeit Set[Seq[String]] und ich weiß nicht, wie man es in Seq[String] umwandeln kann.

val formatter = new SimpleDateFormat("yyyy-MMM-dd") 
val currDay = Calendar.getInstance 
currDay.add(Calendar.DATE, -1) 
val day_1_ago = currDay.getTime 
currDay.add(Calendar.DATE, -1) 
val day_2_ago = currDay.getTime 
val dates = Set(formatter.format(day_1_ago),formatter.format(day_2_ago)) 

val filePathsList = dates.map(date => { 
    val list: Seq.empty[String] 
    for (num <- 7 to 22) { 
    list :+ s"path/file_$date-$num" + " 
    } 
    list 
}) 
+0

Set [Seq [Zeichenfolge]] kann leicht umgewandelt werden zu Seq [String] via flatMap – Tanjin

+0

@Tanjin: Ich habe es endlich mit '.toSeq.flatten' gemacht, aber die Schlüsselfrage bleibt immer noch - wie man solche String Elemente für N Daten flexibel erstellen kann. nicht nur 2, wie es im Code angezeigt wird. – user7379562

Antwort

3

Hier ist, wie ich in der Lage war, zu erreichen, was Sie skizzierte, stellen Sie die days val die Anzahl der Tage zu konfigurieren, die Sie interessieren:

import java.text.SimpleDateFormat 
import java.util.Calendar 

val currDay = Calendar.getInstance 
val days = 5 

val dates = currDay.getTime +: List.fill(days){ 
    currDay.add(Calendar.DATE, -1) 
    currDay.getTime 
} 
val formatter = new SimpleDateFormat("yyyy-MMM-dd") 
val filePathsList = for { 
    date <- dates 
    num <- 7 to 22 
} yield s"path/file_${formatter.format(date)}-$num" 
+0

Großartig! Es sollte wahrscheinlich 'val formatierer = neu SimpleDateFormat (" yyyy-MMM-dd ") val daten = currDay.getTime +: List.fill (Tage) { currDay.add (Calendar.DATE, -1) Formatierer. Format (currDay.getTime) } ' – user7379562

+0

Könnten Sie bitte erklären, was' yield' tut? – user7379562

+0

Ich entschuldige mich dafür, dass ich den Formatierer nicht verwendet habe - Ich habe die Antwort aktualisiert, um ihre Verwendung zu reflektieren. Dies erklärt den Ertrag viel besser als ich könnte: http://docs.scala-lang.org/tutorials/FAQ/yield.html – Tanjin

Verwandte Themen