1. ホーム
  2. java

[解決済み] Java 8 は、値や関数を繰り返す良い方法を提供していますか?

2022-06-26 14:27:46

質問

他の多くの言語、例えばHaskellでは、値や関数を複数回繰り返すことは簡単です。

take 8 (repeat 1)

というのがありますが、Java8ではまだ見つかっていません。 Java 8のJDKにはそのような機能はないのでしょうか?

または代わりに、以下のような範囲に相当するものがあります。

[1..8]

のようなJavaの冗長な文の代わりになるのは明らかだと思われます。

for (int i = 1; i <= 8; i++) {
    System.out.println(i);
}

のようなものを持つようにします。

Range.from(1, 8).forEach(i -> System.out.println(i))

この例は、実際にはあまり簡潔には見えませんが...読みやすくなっていることを願っています。

どのように解決するのですか?

この具体的な例では、次のようにすればよいでしょう。

IntStream.rangeClosed(1, 8)
         .forEach(System.out::println);

1とは異なるステップが必要な場合は、マッピング関数を使用することで、例えば、2というステップにすることができます。

IntStream.rangeClosed(1, 8)
         .map(i -> 2 * i - 1)
         .forEach(System.out::println);

または、カスタムイテレーションを構築し、イテレーションのサイズを制限する。

IntStream.iterate(1, i -> i + 2)
         .limit(8)
         .forEach(System.out::println);