仕事でGroovyのDefaultGroovyMethodsをJavaのStream APIを使った形に書き直すという作業を行ったので、備忘録も兼ねてまとめます。
サンプルコードの動作はそれぞれ以下のバージョンで確認しています。
Java: 11
Groovy: 2.5.8
DefaultGroovyMethod ⇔ Stream API
each ⇔ forEach
Groovy
def list = ["Java", "Groovy", "Scala"]
list.each { println it }
---結果---
Java
Groovy
Scala
Java
List<String> list = List.of("Java", "Groovy", "Scala");
list.forEach(System.out::println);
---結果---
Java
Groovy
Scala
collect ⇔ map + collect
Groovy
def lowerCases = ["java", "groovy", "scala"]
def upperCases = lowerCases.collect { it.toUpperCase() }
println upperCases
---結果---
[JAVA, GROOVY, SCALA]
Java
List<String> lowerCases = List.of("java", "groovy", "scala");
List<String> upperCases = lowerCases.stream().map(language -> language.toUpperCase()).collect(Collectors.toList());
System.out.println(upperCases);
---結果---
[JAVA, GROOVY, SCALA]
findAll ⇔ filter + collect
Groovy
def numbers = [1, 2, 3, 4, 5]
def odds = numbers.findAll { it % 2 != 0 }
println odds
---結果---
[1, 3, 5]
Java
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
List<Integer> odds = numbers.stream().filter(number -> number % 2 != 0).collect(Collectors.toList());
System.out.println(odds);
---結果---
[1, 3, 5]
参考資料
公式リファレンス
List
https://docs.oracle.com/javase/jp/8/docs/api/java/util/List.html
Stream
https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html
Collectors
https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Collectors.html
DefaultGroovyMethods
http://docs.groovy-lang.org/latest/html/api/org/codehaus/groovy/runtime/DefaultGroovyMethods.html
Qiita記事
Groovyよく使いそうなメソッド(List編)
https://qiita.com/kimromi/items/e326bf9c24220df97ecf