JavaのanyMatchって、C#でいうAnyだっけ？つまり、JavaScriptのsomeだよね？もう対応表つくるわ！

これは、 [Java Advent Calendar 2019](https://qiita.com/advent-calendar/2019/java) の12日目の記事です。
昨日は @e-a-st さんによる [人生最後に学ぶプログラム言語とは？　(生涯給与３億円クラブに追いつきたい場合)](https://qiita.com/e-a-st/items/eaa6815ef8bb264789ce) でした。



# JavaのanyMatchって、C#でいうAnyだっけ？つまり、JavaScriptのsomeだよね？

ここ数年、Java、JavaScript、C#をよく扱います。（といいつつ最近は、Pythonの記事を投稿しまくってるわけですがｗ）

どの言語にも、関数型プログラミング的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    | :x:              | Distinct      |



## 並べ替える系

リスト（≒ストリーム）を並べ替えるやつです。

| 機能       | Java Stream | JavaScript Array | C# Enumerable |
| ---------- | ----------- | ---------------- | ------------- |
| 並べ替える | sorted      | sort             | OrderBy       |
| 反転する   | :x:         | reverse          | Reverse       |



## Booleanを返却する系

Booleanを返却するやつです。命名がバラバラでいつも混ざります。

| 機能                             | Java Stream | JavaScript Array | C# Enumerable |
| -------------------------------- | ----------- | ---------------- | ------------- |
| すべての要素が条件に合うかどうか | allMatch    | every            | All           |
| どれかの要素が条件に合うかどうか | anyMatch    | some             | Any           |



## 集計する系

集計できるやつらです。JavaScriptは :x: が多いですね。

| 機能           | Java Stream | JavaScript Array | C# Enumerable |
| -------------- | ----------- | ---------------- | ------------- |
| 畳み込む       | reduce      | reduce           | Aggregate     |
| 要素数を数える | count       | length            | Count         |
| 最大値を求める | max         | :x:              | Max           |
| 最小値を求める | min         | :x:              | Min           |

上記の対応表に出てくる length や count() は、厳密には同じ機能ではありませんが、似たような場面で使いますので、対応表に記載いたしました。
この件でコメントをいただいてますので、詳しくはコメント欄をご覧ください。



# さいごに

JavaとJavaScriptは、命名が似ている気がしますね！

C#の命名はSQLを意識しているんだろうなぁと思います。



本記事作成にあたり、以下の記事を参考にさせていただきました。ありがとうございました。

- [Oracle / Java SE 8 / Stream](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html)
- [MSN web docs / Array](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array)
- [Microsoft Docs / .NET / System.Linq / Enumerable クラス](https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable?view=netframework-4.8)
- [JavaScriptでforEach, filter, map, reduceとか](https://qiita.com/itagakishintaro/items/29e301f3125760b81302)
- [はじめての LINQ](https://qiita.com/nskydiving/items/c9c47c1e48ea365f8995)
- [LINQ to Objects と Java8-Stream API と Kotlin の対応表](https://qiita.com/amay077/items/9d2941283c4a5f61f302)
- [Linq 拡張メソッド一覧](https://qiita.com/Apeworks/items/3575bcb90b6097dd6740)



これは、 [Java Advent Calendar 2019](https://qiita.com/advent-calendar/2019/java) の12日目の記事でした。
明日は @dhirabayashi さんによる [【Java】OS依存な標準ライブラリを挙げてみる](https://qiita.com/dhirabayashi/items/ac2a86e74011f3eb671a) です！