おじさんの知識アップデート2
Java8で導入されたパッケージについてです。
今まで職場のutil系のクラスはライブラリチームが作ってくれたものを使っていましたが、今ではjavaに標準で実装されてる感じですかね。
Java 8 日付/時刻 API
Java 8では、java.timeパッケージが導入され、日付や時刻の操作が簡単で安全になりました。ここでは従来の書き方とJava 8 APIの書き方を比較します。
1. 従来の書き方(java.util.Date / Calendar)
import java.util.Calendar;
import java.util.Date;
public class DateExample {
public static void main(String[] args) {
// 現在日時を取得
Calendar calendar = Calendar.getInstance();
Date now = calendar.getTime();
System.out.println("現在日時: " + now);
// 1週間後を計算
calendar.add(Calendar.DAY_OF_MONTH, 7);
Date nextWeek = calendar.getTime();
System.out.println("1週間後: " + nextWeek);
}
}
2. Java 8 API の書き方(java.time)
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeExample {
public static void main(String[] args) {
// 現在日時
LocalDateTime now = LocalDateTime.now();
System.out.println("現在日時: " + now);
// 1週間後
LocalDateTime nextWeek = now.plusWeeks(1);
System.out.println("1週間後: " + nextWeek);
// 日付フォーマット
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm");
System.out.println("フォーマット済: " + now.format(formatter));
}
}
まとめ
| 項目 | 従来の書き方 | Java 8 の書き方 |
|---|---|---|
| 日付/時刻取得 |
Calendar / Date
|
LocalDateTime / LocalDate
|
| 日付計算 | Calendar.add() |
plusWeeks(), plusDays()
|
| フォーマット | SimpleDateFormat |
DateTimeFormatter |
Java 8 の java.time を使うと、日付や時刻の操作がより直感的でバグの少ないコードになります。
Java 8 Optional
Java 8では、Optionalクラスが導入され、null値による例外を防ぎ、より安全なコードを書くことができます。ここでは従来のnullチェックとJava 8 APIの書き方を比較します。
1. 従来の書き方(nullチェック)
public class OptionalOldExample {
public static void main(String[] args) {
String value = getValue();
if (value != null) {
System.out.println("値: " + value.toUpperCase());
} else {
System.out.println("値はありません");
}
}
private static String getValue() {
return null; // null を返す場合
}
}
2. Java 8 API の書き方(Optional)
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
Optional<String> value = Optional.ofNullable(getValue());
// 値が存在する場合のみ処理
value.ifPresent(v -> System.out.println("値: " + v.toUpperCase()));
// 値が存在しない場合のデフォルト
String result = value.orElse("値はありません");
System.out.println(result);
}
private static String getValue() {
return null; // null を返す場合
}
}
まとめ
| 項目 | 従来の書き方 | Java 8 の書き方 |
|---|---|---|
| nullチェック | if (value != null) |
Optional.ofNullable() |
| 値の処理 | if 文内で処理 | ifPresent() |
| デフォルト値 | if else で設定 | orElse() |
Optional を使うことで、null安全で読みやすいコードを書くことができます。
Java 8 Stream API
Java 8では、Stream APIを使うことでコレクションの操作を簡潔で直感的に行うことができます。ここでは従来のfor文とJava 8のStream APIの書き方を比較します。
1. 従来の書き方(for文)
import java.util.ArrayList;
import java.util.List;
public class StreamOldExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
List<String> result = new ArrayList<>();
for (String name : names) {
if (name.startsWith("A")) {
result.add(name.toUpperCase());
}
}
System.out.println(result);
}
}
2. Java 8 API の書き方(Stream API)
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> result = names.stream()
.filter(name -> name.startsWith("A"))
.map(String::toUpperCase)
.collect(Collectors.toList());
System.out.println(result);
}
}
まとめ
| 項目 | 従来の書き方 | Java 8 の書き方 |
|---|---|---|
| コレクション操作 | for 文 / if 文 | Stream API |
| 条件フィルター | if 文 | filter() |
| 変換 | 手動でループ内変換 | map() |
| 集約 | 手動でリストに追加 | collect(Collectors.toList()) |
Stream API を使うことで、コレクション操作が短く読みやすく、バグも減らせます。
所感
私の昔の職場でJavaを使っていた時は、このような便利なライブラリなど無く、if,for,switchなど駆使して処理を書いてたりしました。
アップデートされ続けて、便利道具が付け加えられていく分、その道具の使い方を定期的に学ばないと追いていかれるなと改めて感じました。