class CollectorUtil {

    private CollectorUtil() { }

    /**
     * Similar to the 
     * {@link Collectors#joining(CharSequence, CharSequence, CharSequence)}
     * method except that this method surrounds the result with the specified
     * {@code prefix} and {@code suffix} even if the stream is empty.
     *
     * @param delimiter  the delimiter to separate the strings
     * @param prefix     the prefix to put before the result
     * @param suffix     the suffix to put after the result
     * @return           a {@link Collector} for joining string elements
     */
    public static Collector<String, ?, String> joinIfNotEmpty(String delimiter, String prefix, String suffix) {<FILL_FUNCTION_BODY>}

}

        return Collector.of(
                () -> new StringJoiner(delimiter),
                StringJoiner::add,
                StringJoiner::merge,
                s -> s.length() > 0
                        ? prefix + s + suffix
                        : s.toString()
        );
    
<no_super_class>