Я изучаю Lambdas и Stream API, который поставляется с Java 8. Я хотел создать что-то вроде этого, используя Stream API только для учебных целей:
b
bb
bbb
bbbb
bbbbb
bbbb
bbb
bb
b
и вот реализация, которую я придумал:
final File file = new File("/Users/kt/sample.data");
final PrintWriter printWriter = new PrintWriter(file);
Stream.concat(IntStream.iterate(1, i -> i + 1).limit(6).boxed(),
IntStream.iterate(5, i -> i - 1).limit(5).boxed())
.map(counter -> {
StringBuilder stringBuilder = new StringBuilder();
IntStream.range(1, counter).forEach(c -> stringBuilder.append("b"));
return stringBuilder.toString();
}).filter(s -> s.length() != 0).forEach(s -> printWriter.println(s));
printWriter.flush();
printWriter.close();
Теперь единственная проблема в том, что в итоге я получаю пустую последнюю строку в файле, поскольку printwriter печатает последнюю букву 'b' вместе с новой строкой.
Очевидно, что я могу передать 4
вместо 5
во 2-й IntStream.iterate
У меня есть, и перед сбросом printWriter
я могу сделать: printWriter.print("b");
, но моя цель - использовать Stream API.
Как мне добиться этого больше Streamy ?