これは、 Java Advent Calendar 2019 の12日目の記事です。
昨日は @e-a-st さんによる 人生最後に学ぶプログラム言語とは? (生涯給与3億円クラブに追いつきたい場合) でした。
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 | length | Count |
最大値を求める | max | Max | |
最小値を求める | min | Min |
上記の対応表に出てくる length や count() は、厳密には同じ機能ではありませんが、似たような場面で使いますので、対応表に記載いたしました。
この件でコメントをいただいてますので、詳しくはコメント欄をご覧ください。
さいごに
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日目の記事でした。
明日は @dhirabayashi さんによる 【Java】OS依存な標準ライブラリを挙げてみる です!