【Java】for文だけじゃない!いろんなループ処理!さて、どれを実装しようか

Javaでのループ処理は基本的なfor文やwhile文の他にも、様々なライブラリやAPIを利用して多彩な方法で実装できます

以下に、代表的なループ処理の方法をいくつか紹介します


1. 基本的なループ文

1.1 for文

for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

1.2 拡張for文(for-each文)

List<String> list = Arrays.asList("A", "B", "C");
for (String s : list) {
    System.out.println(s);
}

1.3 while文

int i = 0;
while (i < 10) {
    System.out.println(i);
    i++;
}

1.4 do-while文

int i = 0;
do {
    System.out.println(i);
    i++;
} while (i < 10);

2. Java Streams API を使ったループ

Java 8から導入されたStreams APIを使用することで、関数型プログラミングのスタイルでループを処理できます

2.1 forEach

List<String> list = Arrays.asList("A", "B", "C");
list.stream().forEach(s -> System.out.println(s));

2.2 map + forEach

List<String> list = Arrays.asList("A", "B", "C");
list.stream()
    .map(String::toLowerCase)
    .forEach(System.out::println);

3. 外部ライブラリを使ったループ処理

3.1 Guava の Lists.partition

Guavaライブラリを使用して、リストをチャンクに分割して処理する方法です

List<String> list = Arrays.asList("A", "B", "C", "D", "E");
List<List<String>> partitions = Lists.partition(list, 2);
partitions.forEach(part -> {
    part.forEach(System.out::println);
});

3.2 Apache Commons の CollectionUtils

Apache Commons Collections の CollectionUtils.forAllDo を使ってループ処理を行うことも可能です

List<String> list = Arrays.asList("A", "B", "C");
CollectionUtils.forAllDo(list, new Closure<String>() {
    public void execute(String input) {
        System.out.println(input);
    }
});

4. 再帰を使ったループ処理

再帰を使用することで、ループ処理を実装することも可能です
特に、階層構造を持つデータの処理などに有効です

void recursiveLoop(int n) {
    if (n < 0) return;
    System.out.println(n);
    recursiveLoop(n - 1);
}

5. 並列処理を使ったループ

5.1 parallelStream

Stream API を使った並列処理も可能です

List<String> list = Arrays.asList("A", "B", "C");
list.parallelStream().forEach(System.out::println);

5.2 CompletableFuture

CompletableFuture を使って非同期処理を並列に実行することもできます

List<CompletableFuture<Void>> futures = new ArrayList<>();
for (String s : list) {
    futures.add(CompletableFuture.runAsync(() -> System.out.println(s)));
}
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();

是非フォローしてください

最新の情報をお伝えします