CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第3章 ラムダ式を使ったプログラミング : 問題 7 : Comparator の生成

問題 7

Comparator<String>を生成するメソッドラムダ式を使って書け

このComparatorは、以下のオプションを組み合わすことができるようにせよ

  • 普通の順序 or 逆順
  • 大文字・小文字を区別 or 区別しない
  • 空白を含める or 除外する

解答

“空白を除外”とは、トリミングではなく空白文字を除くこととして実装する。

public static Comparator<String> comparator(
    boolean reverse,       // 逆順
    boolean ignoreCase,    // 大文字・小文字を区別しない
    boolean excludeSpace)  // 空白を除外
{
    return (t, u) -> {
        // 正順 or 逆順
        int sign = reverse ? -1: 1;
        // 大文字・小文字を区別 or 区別しない
        if (ignoreCase) {
            t = t.toLowerCase();
            u = u.toLowerCase();
        }
        // 空白を含める or 除外する
        if (excludeSpace) {
            t = t.replaceAll("\\s", "");
            u = u.replaceAll("\\s", "");
        }
        // 比較
        return sign * t.compareTo(u);
    };
}