Есть ли способ достичь чего-то похожего на мой код, приведенный ниже, без необходимости повторяться, сохраняя при этом низкую обработку?
List<String> alist = new ArrayList<>();
alist.add("hello");
alist.add("hello2");
if(verbose) {
alist.stream()
.peek(System.out::println)
.forEach(/*dostuff*/);
}
else {
alist.stream().forEach(/*dostuff*/);
}
Как видно выше, я вынужден повторитьобработка потока в случае if или else, которая выглядит несколько уродливо, если поток становится немного длиннее.
Есть еще один вариант, который, на мой взгляд, выглядит чище, но с точки зрения производительности он должен быть хуже, так как он сравнивает многословное логическое значение для каждого элемента в списке.
List<String> alist = new ArrayList<>();
alist.add("helllo");
alist.add("hello2");
alist.stream()
.peek(this::printVerbose)
.forEach(/*dostuff*/);
}
private void printVerbose(String v) {
if(verbose) {
System.out.println(v);
}
}