LoginSignup
33
33

More than 5 years have passed since last update.

Java8コードサンプル(for文禁止)

Last updated at Posted at 2015-07-17

※Java8練習用のコードのため、実用的であるかはあまり考慮していない

for文を使わない書き方

Java8から実装されたAPIを使って、for文を使わずにコードを書いた場合のサンプル。
Java8以前の書き方と比較するため、「Java7」にfor文を使ったコードを記載する。

指定回数の繰り返し

10回、一定の文字列を出力する。

  • Java7
for (int i=0; i < 10; i++) {
    System.out.println("Java!");
}
  • Java8
IntStream.range(0, 10).forEach(i -> System.out.println("Java!"));

他の言語の場合

  • Scala
(0 until 10).foreach(i => println("Scala!"))
// or
(1 to 10).foreach(i => println("Scala!"))
  • Groovy
(0 ..< 10).each { println("Groovy!") }
// or
(1 .. 10).each { println("Groovy!") }

同じ文字の繰り返し

  • Java7
StringBuilder sb = new StringBuilder();
for (int i=0; i < 10; i++) {
    sb.append("*");
}
System.out.println(sb.toString());
String asters = StringUtils.repeat("*", 10);
System.out.println(asters);

StringUtils#repeat

  • Java8
String asters = IntStream.range(0, 10)
                .mapToObj(i -> "*")
                .collect(Collectors.joining());
System.out.println(asters);

この書き方は書けるというサンプルで、実際はやらない方がいいと思う

文字列長が一番多い文字列を返却

  • Java7
public String getMaxString(List<String> list) {

    String result = "";
    for (String str : list) {
        if (str != null && str.length() >= result.length()) {
            result = str;
        }
    }
    return result;
}
  • Java8
public String getMaxString(List<String> list) {

    return list
            .stream()
            .filter(str -> str != null)
            .reduce((str1, str2) -> str1.length() >= str2.length() ? str1 : str2)
            .orElse("");
}

作った値の合計を返却

  • java7
int sum = 0;
for (int i=0; i < 10; i++) {
    sum += i * 2;
}
  • java8
int sum = IntStream.range(0, 10).map(i -> i * 2).sum();

インナークラスの実装

関数型インターフェイスとなるインターフェイスを持つクラスを、インナークラスで定義した場合。

Thread#run()の実装

  • Java7
Thread t = new Thread() {
    @Override
    public void run() {
        for (int i=0; i < 10000; i++) {
            System.out.print("Nice!");
        }
    }
};
  • Java8
Thread t = new Thread(() -> {
    IntStream.range(0, 10000).forEach(i -> System.out.print("Nice!"));
});
  • Java8(ThreadFactoryを使用した場合)
ThreadFactory factory = Executors.defaultThreadFactory();
Thread t = factory.newThread(() -> {
    IntStream.range(0, 10000).forEach(i -> System.out.print("Nice!"));
    });
33
33
1

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
33
33