package com.github.mygreen.supercsv.expression; import java.util.Arrays; import java.util.Collection; import java.util.Objects; import java.util.stream.Collectors; import com.github.mygreen.supercsv.cellprocessor.format.TextPrinter; /** * EL式中で利用可なユーティリティ関数。 * * @since 2.0 * @author T.TSUCHIE * */ public class CustomFunctions { /** * 文字列がnullの場合に空文字に変換する。 * <pre class="highlight"><code class="java"> * CustomFunctions.defaultString(null) = "" * CustomFunctions.defaultString("") = "" * CustomFunctions.defaultString("abc") = "abc" * </code></pre> * * @param text 判定対象の文字列 * @return 非nullの場合は、引数の値をそのまま返す。 */ public static String defaultString(final String text) { if(text == null) { return ""; } return text; } /** * int型の配列の値を結合する。 * @param array 結合対象の配列 * @param delimiter 区切り文字 * @return 結合した文字列を返す。結合の対象の配列がnulの場合、空文字を返す。 */ public static String join(final int[] array, final String delimiter) { if(array == null || array.length == 0) { return ""; } String value = Arrays.stream(array) .boxed() .map(String::valueOf) .collect(Collectors.joining(defaultString(delimiter))); return value; } /** * 配列の値を結合する。 * @param array 結合対象の配列 * @param delimiter 区切り文字 * @return 結合した文字列を返す。結合の対象の配列がnulの場合、空文字を返す。 */ public static String join(final Object[] array, final String delimiter) { if(array == null || array.length == 0) { return ""; } String value = Arrays.stream(array) .map(v -> v.toString()) .collect(Collectors.joining(defaultString(delimiter))); return value; } /** * 配列の値を結合する。 * @param array 結合対象の配列 * @param delimiter 区切り文字 * @param printer 配列の要素の値のフォーマッタ * @return 結合した文字列を返す。結合の対象の配列がnulの場合、空文字を返す。 * @throws NullPointerException {@literal printer is null.} */ @SuppressWarnings({"rawtypes", "unchecked"}) public static String join(final Object[] array, final String delimiter, final TextPrinter printer) { Objects.requireNonNull(printer); if(array == null || array.length == 0) { return ""; } String value = Arrays.stream(array) .map(v -> printer.print(v)) .collect(Collectors.joining(defaultString(delimiter))); return value; } /** * コレクションの値を結合する。 * @param collection 結合対象のコレクション * @param delimiter 区切り文字 * @return 結合した文字列を返す。結合の対象のコレクションがnulの場合、空文字を返す。 */ public static String join(final Collection<?> collection, final String delimiter) { if(collection == null || collection.isEmpty()) { return ""; } String value = collection.stream() .map(v -> v.toString()) .collect(Collectors.joining(defaultString(delimiter))); return value; } /** * コレクションの値を結合する。 * @param collection 結合対象のコレクション * @param delimiter 区切り文字 * @param printer コレクションの要素の値のフォーマッタ * @return 結合した文字列を返す。結合の対象のコレクションがnulの場合、空文字を返す。 * @throws NullPointerException {@literal printer is null.} */ @SuppressWarnings({"rawtypes", "unchecked"}) public static String join(final Collection<?> collection, final String delimiter, final TextPrinter printer) { Objects.requireNonNull(printer); if(collection == null || collection.isEmpty()) { return ""; } String value = collection.stream() .map(v -> printer.print(v)) .collect(Collectors.joining(defaultString(delimiter))); return value; } }