授業で習わなかったJava

大学二年生の頃にjavaを授業で学んだが、その時に習わなかったjavaの使い方メモ。
javaをあまり使っていないので構文や使い方に間違いがあるかも。

目次

  • lambda
  • try-with-resources
  • nio
  • stream-api
  • optional
  • var

lambda

ラムダ式。こちらを参照しました。

Runnable runner = new Runnable() {
  @Override
  public void run() {
    System.out.println("長いコード");
  }
};
runner.run();

上記コードが下記のように書ける。

Runnable runner = () -> {
  System.out.println("短くなった!");
};
runner.run();

try-with-resources

バイバイclose()。

try () {
  ここでclose()が必要な変数定義
  変数を使う
  close()する
} catch (なんとかException) {

}

上記変数定義をtryの引数で行うとほとんどの場合はclose()がいらない!

try (ここでclose()が必要な変数定義) {
  変数を使う
} catch (なんとかException) {

}

こんな風にもかけるらしい

void foo() throw なんとかException {
  ここでclose()が必要な変数定義
  try (変数) {
    変数を使う
  }
}

nio

ファイルの操作が簡単になるらしい。
こちらのコードを参照しました。

try {
  BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(ファイルパス), "UTF-8"));
  brを使う
  close()
}

上記のコードがなんと下記のように書けるらしい。

try (BufferedReader br = Files.newBufferedReader(ファイルパス, StandardCharsets.UTF_8)) {
  brを使う
}

こんな風にもかけるらしい

Path path = Paths.get(パス);
try (Stream<String> lines = Files.lines(path)) {
    lines.forEach(System.out::println);
} catch (IOException e) {
}

stream-api

Stream APIを使うと、分かりやすくコードを書くことができるらしい。

配列やリストや連想配列等のfoo定義

for(型 bar : foo) {
  if (bar == 1) {
    System.out.println(bar);
  }
}

上記の処理を下記のように書けるようになる。

配列やリストや連想配列等のfoo定義

foo.stream()
  .filter(bar -> bar == 1)
  .forEach(bar -> System.out.println(bar));

optional

バイバイぬるぽ

Dog shibainu = getDog();
if (shibainu == null) {

}

上記の処理を下記のように書くことで強制的にnullチェック!

Optional<Dog> shibainu = Optional.ofNullable(getDog());

shibainu.ifPresent(inu -> inu.bark());

var

型の推論。

Map<String, String> map = Map.of("foo", "1", "bar", "2", "baz", "3");

Map<String, String>varで書くことができる

var map = Map.of("foo", "1", "bar", "2", "baz", "3");

備忘録

もしかして今は習ってい可能性もある。
そもそも、当時教えて貰っていたけど覚えていなかったり、聞いていなかったりしたかも。
javaのバージョンによっては使えないのもあるかも。

参考