これは、 Java Advent Calendar 2019の12日目の記事です。
JavaのanyMatchって、C#でいうAnyだっけ?つまり、JavaScriptのsomeだよね?
ここ数年、Java、JavaScript、C#をよく扱います。(といいつつ最近は、Pythonの記事を投稿しまくってるわけですがw)
どの言語にも、関数型プログラミング的APIがあるんですけど、
- Javaの
reduceってC#だと何だっけ? - JavaScriptの
someってJavaだとanyだったはず(anyMatchの間違い)
みたいなことが最近増えたので、対応表を作ってみることにしました。
対応表
本当はもっといっぱいAPIがあると思いますが、とりあえず私がよく使うやつを並べます。
Javaなら Stream API、C#なら LINQ to Objectsなんて呼ぶことの方が多いとは思いますが、今回はclass名(≒interface名≒object名)に表記を統一いたします。
そのため、以下のようになります。
- Java : Stream
- JavaScript : Array
- C# : Enumerable
リストを変換する系
リスト(≒ストリーム)を入力すると、リストが返却されるやつらです。
| 機能 | Java Stream | JavaScript Array | C# Enumerable |
|---|---|---|---|
| 要素数を変えずに変換する(写像・射影) | map | map | Select |
| 条件にあうものを抽出する | filter | filter | Where |
| 平坦にする | flatMap | flat | SelectMany |
| 重複をなくす | distinct | ![]() | Distinct |
並べ替える系
リスト(≒ストリーム)を並べ替えるやつです。
| 機能 | Java Stream | JavaScript Array | C# Enumerable |
|---|---|---|---|
| 並べ替える | sorted | sort | OrderBy |
| 反転する | ![]() | reverse | Reverse |
Booleanを返却する系
Booleanを返却するやつです。命名がバラバラでいつも混ざります。
| 機能 | Java Stream | JavaScript Array | C# Enumerable |
|---|---|---|---|
| すべての要素が条件に合うかどうか | allMatch | every | All |
| どれかの要素が条件に合うかどうか | anyMatch | some | Any |
集計する系
集計できるやつらです。JavaScriptは
が多いですね。
| 機能 | Java Stream | JavaScript Array | C# Enumerable |
|---|---|---|---|
| 畳み込む | reduce | reduce | Aggregate |
| 要素数を数える | count | ![]() | Count |
| 最大値を求める | max | ![]() | Max |
| 最小値を求める | min | ![]() | Min |
さいごに
JavaとJavaScriptは、命名が似ている気がしますね!
C#の命名はSQLを意識しているんだろうなぁと思います。
本記事作成にあたり、以下の記事を参考にさせていただきました。ありがとうございました。
- Oracle / Java SE 8 / Stream
- MSN web docs / Array
- Microsoft Docs / .NET / System.Linq / Enumerable クラス
- JavaScriptでforEach, filter, map, reduceとか
- はじめての LINQ
- LINQ to Objects と Java8-Stream API と Kotlin の対応表
- Linq 拡張メソッド一覧
これは、 Java Advent Calendar 2019の12日目の記事でした。