LoginSignup
0
0

【浦島太郎状態】久々にJavaをいじってみたら色々便利になってた件

Posted at

もともとJava使い

自分がこの業界入った時はJava 1.5ぐらいでstruts 1.3でWebシステム作るのがモダンだった古き悪しき時代を乗り越えてきた、え~すけさんですよ。
そんなわけで、自分は転職組なので前の会社の話ですが、もれなく入社してから最初のプログラム研修はJavaを使って生のServlet/JSPや、strutsを使ってWEBシステムを作らされた記憶があり、大学でJavaのアプレットでなんか作るみたいなことはやってましたが、Webという覚えることだらけの魔境に四苦八苦してました。
ほら、WebってJavaだけじゃなくて、HTML/JavaScript/CSSが漏れなくついてくるから、覚えること増えるじゃん?

そんなこんなで、この業界に入ってから割とずっとJavaのプロジェクトをやってきており、実務ではJava 1.4/1.5/6/8/11ぐらいまでの記憶しかなかったですが、久々にAndroidStudioのバージョンアップしたら17以降を使えやコラみたいな警告が出てしまったので、今っていくつまで出てるのか調べたのと、Java8ぐらいが全盛期の人がどれだけうらしまたろう状態になってるかを簡単にまとめてみました。

とりあえずラムダ

Java8から出てきたやつ。
jQueryとかNode使いからすると、なんだチェーン的なアレじゃんとなるが、基本構文しかやってない新人やJava6で満足してる勢からすると初見殺しのアレ。

ラムダ
    public static void main(String[] args) {
        // アルファベット
        List<String> list = Arrays.asList("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o",
                "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
                "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
        // とりあえ頭からSysout
        list.forEach(System.out::println);

        // マルチスレッドでSysout
        list.parallelStream().forEach(System.out::println);

        // ソート(文字コード順)してSysout
        list.stream().sorted().forEach(System.out::println);

        // ソート(アルファベット順で(同じアルファベットなら小文字→大文字の順))してSysout
        list.stream().sorted(String::compareToIgnoreCase).forEach(System.out::println);
    }

メインの使い所としてはListやMapなどのコレクション系のクラスから、マッチするレコードを探すとか中身を編集して別のコレクションに変換するとか、単純にFor文書かないでループさせるとかぐらいかなと。
Java5/6ぐらいで出てきた拡張For文も結構衝撃だったけど、ラムダによってコード量が激減したのはかなりインパクトあった。

switch文の進化

大量のif文をスッキリさせるSwitch文ですが、研修とかだとEnumや数値で判定して、その中でなにか処理を書くみたいなアレですが、今は値をそのまま返すことが出来るみたいです。

Switch
    // 曜日Enum
    public enum Day { 
        SUNDAY, 
        MONDAY, 
        TUESDAY,
        WEDNESDAY, 
        THURSDAY, 
        FRIDAY, 
        SATURDAY; 
    }
    
    public static void main(String[] args) {
        Day day = Day.FRIDAY;
        String jpDayLabel = switch (day) {        
        	case SUNDAY -> "日";
        	case MONDAY -> "月";
        	case TUESDAY -> "火";
        	case WEDNESDAY -> "水";
        	case THURSDAY -> "木";
        	case FRIDAY -> "金";
        	case SATURDAY -> "日";
        	default -> "曜日不明"
        }
        System.out.println(jpDayLabel);
    }

->って書いてあるから、ラムダ的な書き方なのかしら?
->{ なんかの処理; return 結果;} みたいな書き方とかも出来るのかしら?

複数行の文字列の宣言

Javaで複数行の文字列を作るときって、
StringBuilderとかで\nをアペンドしてとかやったり、行数分のString[]を定義してjoinとかで区切り文字に\nとかいれてましたが、そんな可読性が下がることはしなくてもいいみたいです。
※テキストブロックっていう名前らしいです。

複数行定義
    public static void main(String[] args) {
        // 文字列を宣言する時に """ って書くだけ。
        System.out.println("""
            1行目
            2行目
            3行目
            """);
    }

使い所としてはJPAとかでアノテーションにSQL書くとか、簡単なファイル出力やメール送信時のテンプレ文言などを定義するときとかに役立つかなと。

他の機能も色々とありましたが、とりあえず自分がこりゃいいやと思ったものだけとりあえず紹介してみましたよ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0