Я пытаюсь преобразовать обычный цикл, который я сделал несколько месяцев назад, в java 8 streams
У меня мало знаний о потоке, поскольку я только начал использовать java 8 несколько дней назад.
Вот мой обычный цикл, который я хотел воссоздать в потоки
public static List<SmaliAnnotation> getAnnotations(List<String> lines, boolean hasPadding) {
StringBuilder temp = new StringBuilder();
List<SmaliAnnotation> annotations = new ArrayList<>();
boolean shouldAdd = false;
for (String line : lines) {
String trim = hasPadding ? line.trim() : line;
if (trim.isEmpty()) continue;
if (trim.startsWith(".annotation")) {
shouldAdd = true;
}
if (shouldAdd) {
temp.append(line).append("\n");
}
if (trim.equalsIgnoreCase(".end annotation")) {
shouldAdd = false;
annotations.add(new SmaliAnnotation(temp.toString()));
temp.setLength(0);
}
}
return annotations;
}
Я начал преобразовывать его в потоки Java 8, но я застрял в shouldAdd
части. Я не знаю, как этого добиться с помощью потоков. это моя попытка сделать потоки Java. Чего я не понимаю, так это как установить логическую часть из моего исходного цикла.
public static List<SmaliAnnotation> getAnnotations(List<String> lines, boolean hasPadding) {
StringBuilder temp = new StringBuilder();
boolean shouldAdd = false;
return lines.stream()
.filter(str -> str != null && !str.isEmpty())
.map(line -> hasPadding ? line.trim() : line)
.map(SmaliAnnotation::new)
.collect(Collectors.toList());
}