Java8: Stream filter, map and joining with an alternative result if the stream is empty
You can use reduce, it returns an Optional that is empty if the stream is empty. You can use map to create the csv (or reduce) and add the brackets and orElse to return "-".

private static String doIt(List&lt;Integer&gt; list) {
    return list.stream()
            .filter(i -&gt; (i % 2 == 0))
            .map(Object::toString)
            .reduce((left, right)-&gt; left+"; "+right)
            .map(csv -&gt; "["+csv+"]")
            .orElse("-");
}