ストリームを使用して Java コードを改善する方法
出典:
Dev.to
ストリームとは何ですか?
ストリームは Java 8 で初めて登場しました。Oracle のドキュメントによると、ストリームは、コレクションの Map-Reduce 変換など、要素のストリームに対する関数型の操作をサポートするためのクラスです。簡単に言うと、ストリームはデータ ソース、それに続く 0 個以上の中間操作、最後に終了操作で構成されます。
データソースとは何ですか?
- コレクション、リスト、セット、int、long、double、配列、ファイル行。
中間操作とは何ですか?
- フィルター、マップ、並べ替えなど。
- これらの操作はストリームを返すため、他の操作にチェーンできます。
端末操作とは何ですか?
- ForEach、collect、reduce、findFirst など。
- 無効な結果または非ストリームの結果が返されます。
- スレッドに端末操作がない場合、中間操作は呼び出されません。
Streams を使用して関数を命令型から宣言型に変換してみましょう
命令型関数 (ストリームなし):
private int getResult_imperative(List<String> strings) {
int result = 0;
for (String string : strings){
if(isDigit(string.charAt(0))) continue;
if (string.contains("_")) continue;
result += string.length();
}
return result;
}
ここで、いくつかのことを手動で行う必要があることがわかります。
- 結果を追跡するために結果変数を宣言します。
- 文字列をループします。
- 2 つのifステートメントを記述します(この場合よりもはるかに複雑になる可能性があります)。
- それぞれの長さを結果に加算します。
宣言スタイル (ストリーム) を確認してみましょう。
private int getResult_Declarative(List<String> strings){
return strings.
stream().
filter(s -> !isDigit(s.charAt(0))).
filter(s -> !s.contains("_")).
mapToInt(String::length).
sum();
}
それで、違いは何ですか?
- stream()関数を呼び出して Stream オブジェクトを取得します。
- (中間操作)フィルター関数を 2 回使用します。そのたびに、次のフェーズに進みたい要素のみが満たさなければならない条件を指定します。
- (中間操作) lengthメソッドを呼び出して(メソッド参照スタイルを使用して)、各Stringオブジェクトをintにマップします。
- (端末操作)以前のすべてのint値を合計します。
観察
2 番目のアプローチの方が簡単だと思いませんか?
私たちは、どのようにしたいかではなく、何を望んでいるのかを示しました。これが宣言型プログラミングの精神であり、最新の Java アプリケーションにおける Stream API の目標です。
Java 開発者向けの 5 つのベスト IntelliJ IDEA プラグイン
出典:
GitHubプラグインは、コードを定期的に操作する場合、さまざまな状況で非常に役立ちます。これらは、コア機能を拡張し、さまざまな統合を提供し、多くのタスクの自動化をサポートすることができます。私の考える最高のプラグインは次のとおりです。
ソナーリント
SonarLint を使用すると、コードを記述するときにエラーや脆弱性を修正できます。コーディングの問題をリアルタイムで強調表示し、開発者に修正方法について明確な指示を与えるため、コードがコミットされる前に修正できます。このプラグインはコーディングを大幅に改善するために必要です。
Maven ヘルパー
Maven を使用していると思いますか? 私はします!Maven ヘルパー プラグインは以下を提供します。
- 競合する依存関係を分析して削除する簡単な方法。
- 直接的または推移的な依存関係を見つける簡単な方法。
- 現在のファイルを含むモジュール、またはルート モジュールの Maven ターゲットを実行/デバッグする手順。
- Maven モジュールへの現在のパスでターミナルを開くアクション。
- 現在のテスト ファイルを実行/デバッグするためのアクション。maven-surefire-plugin がテストをスキップまたは除外するように構成されている場合、「verify」目標が使用されます。さまざまな構成スタイルがGitHub で見つかります。
コードメトリクス
このプラグインには、Java ファイルのカスタム難易度計算に基づいたタブ インジケーターがあります。これらは、開発者が何をチェックする必要があるかを簡単に判断できるように、クラスとメソッドでヒントを提供します。
これは標準的な指標ではありませんが、循環的複雑さの近似値です。適切な構成エントリを変更することで、プロジェクトの複雑さの計算をカスタマイズすることもできます。
文字列の操作
大文字と小文字の切り替え、並べ替え、フィルタリング、ズーム、列の配置、grep、エスケープ、エンコードなど...
JPAバディ
JPA Buddy により、JPA 関連のすべてが簡単かつ迅速になります。Hibernate、Spring Data JPA、Liquibase、Flyway の操作に役立つツールを提供します。
JPA Buddy の主な特徴:
- JPA エンティティ: エンティティ、エンティティ属性、ライフサイクル コールバック、インデックス、制約を作成および編集します。JPA コンバーターと Hibernate カスタム タイプのサポート。エンティティに Lombok アノテーションを使用する機能。
- JPAエンティティのequals、hashCode、およびtoStringメソッドの正しい実装を作成します。
- JPAエンティティ宣言のソースコードの意図、チェック、およびクイックフィックス。
- JPA 構造パネルの永続ユニット ノードの下にエンティティ関係をグラフィカルに表示します。
- Liquibase 変更ログと Flyway バージョン移行の自動生成: データベース間、モデル間、モデル対スナップショットの比較。
- Visual Liquibase 変更ログ デザイナーとコーディング支援: 項目の作成と編集、テーブル名、列名、インクルード ファイルなどの参照。
- アクション: Liquibase のスナップショットを作成し、コマンド「Liquibase update」および「Liquibase updateSQL」を実行します。
- Spring Data Repositories: リポジトリの作成、リポジトリ メソッドの作成、メソッド プロパティの編集、エンティティ クラスに基づくプロジェクションの作成、JPQL クエリの抽出。
- Kotlin: すべてのビジュアル デザイナーは、Kotlin オブジェクトとリポジトリのコード生成を完全にサポートしています。
上位 5 つのプラグインについてお話しましたが、あと 1 つあります...
追加のアイコン
これは、Markdown、Yaml、Maven、Git などのファイルへのショートカットを追加するアイコン コレクションです。ファイルを簡単に認識できるようになるので、すぐに慣れるでしょう。必ず必要になります。
GO TO FULL VERSION