私は、Java DateTimeFormatter
のパターンの組み合わせを次のようにして、"E".."EEEE"
と"M".."MMMM"
のパターンの組み合わせを持っています。サブ文字列のストリームを結合する
この場合、Javaストリームを使用するための慣用的な方法がありますか?
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class DateTimeFormattingStackOverflow {
static LocalDateTime dateTime = LocalDateTime.now();
static Stream<String> substrings(String str) {
return IntStream.range(1, str.length() + 1)
.mapToObj(i -> str.substring(0, i));
}
static void printDateTime(String pattern) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);
System.out.println(pattern + ", " + dtf.format(dateTime));
}
public static void main(String[] args) {
Stream<String> patterns = substrings("EEEE")
.flatMap(e -> substrings("MMMM").map(m -> e + " " + m))
.map(em -> em + " d");
patterns.forEach(DateTimeFormattingStackOverflow::printDateTime);
}
}
私はあなたが、文字の繰り返しの実行を生成する方法に変更となる出力
E M d, Sat 7 1
E MM d, Sat 07 1
E MMM d, Sat Jul 1
E MMMM d, Sat July 1
EE M d, Sat 7 1
EE MM d, Sat 07 1
EE MMM d, Sat Jul 1
EE MMMM d, Sat July 1
...
ストリームと一緒にする必要があるのですか、それとも別の慣用的な方法かもしれませんか? –
私は特に 'ストリーム方式'でこれを行うことに関心を持っていましたが、このコードの非ストリーム版が等しく/もっと慣用的なJavaであることは間違いありません。 –