Я считаю, что это то, что вы пытались сделать:
private static String[] substrings(String string) {
// base case
if (string.length() <= 3) {
return new String[] { string };
}
// this will return
return Stream.concat(Stream.of(string.substring(0, 3)),
Arrays.stream(substrings(string.substring(3))).toArray(String::new);
}
Это довольно расточительно, потому что создает много массивов, когда рекурсия разворачивается.
Это можно исправить с помощью возвращая Stream
вместо:
private static Stream<String> substrings(String string) {
// base case
if (string.length() <= 3) {
return Stream.of(string);
}
// this will return
return Stream.concat(Stream.of(string.substring(0, 3)), substrings(string.substring(3)));
}