Mam następujący kod, który jest iterowany nad kombinacjami wzorów i "M".."MMMM"
Java.Łączenie strumieni podłańcuchów
Moje pytanie brzmi, czy istnieje idiomatyczny (lub po prostu "bardziej idiomatyczny") sposób korzystania z strumieni Java w tym przypadku?
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);
}
}
Wyjście
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
...
Czy potrzebujesz go ze strumieniami, czy może to być inny * idiomatyczny * sposób? –
Byłem szczególnie zainteresowany próbą zrobienia tego w "sposób w strumieniach", ale masz rację, że wersje tego kodu z non-Stream mogą być jednakową/bardziej idiomatyczną Javą, i dziękuję ci za twoje sugestie. –