Javaで変数のインスタンス化の複製をどのようにリファクタリングするのが最善ですか?

ジェームス:

私は異なる情報を収集するJavaの2つのメソッドを持っていますが、それらは両方とも同じプロセスをセットアップして実行し、それから情報を収集します-データの収集はループ内で行われ、インスタンス化する変数もループで使用されます。

 Map<Integer, Integer> getResponsesWithCount(int baseCostMultiplier, int reels, int visibleSymbols, String stakeCostUuid, int totalBets) throws InsufficientFundsException {
    final int stake = getStake(baseCostMultiplier, stakeCostUuid);
    long balance = 10L * stake;
    final TestGpasPlatform testGpasPlatform = TestGpasPlatform.create(ryotaAdapter, TestGpasPlatform.DEFAULT_MIN_BET, Math.max(stake, TestGpasPlatform.DEFAULT_MAX_BET), TestGpasPlatform.DEFAULT_MAX_WIN, ImmutableList.of(baseCostMultiplier));

    final Map<Integer, Integer> responseCounts = new HashMap<>();
    for (int count = 0; count < totalBets; count++) {
        final Tuple2<List<Output>, TestGpasPlatform> result = playWithRealRng(baseCostMultiplier, count, reels, visibleSymbols, stakeCostUuid, testGpasPlatform);
        // If we run out of balance, re-start, we want to do meaningful spins that trigger features, etc
        balance = checkBalance(stake, balance, result._1(), count);
        final int byteLength = result._2.getLastResponse().map(s -> s.getBytes().length).orElse(0);
        responseCounts.putIfAbsent(byteLength, 0);
        responseCounts.put(byteLength, responseCounts.get(byteLength) + 1);
    }
    return responseCounts;
}

Map<Integer, Integer> getResponsesWithPayouts(int baseCostMultiplier, int reels, int visibleSymbols, String stakeCostUuid, int totalBets) throws InsufficientFundsException{
    final int stake = getStake(baseCostMultiplier, stakeCostUuid);
    long balance = 10L * stake;
    final TestGpasPlatform testGpasPlatform = TestGpasPlatform.create(ryotaAdapter, TestGpasPlatform.DEFAULT_MIN_BET, Math.max(stake, TestGpasPlatform.DEFAULT_MAX_BET), TestGpasPlatform.DEFAULT_MAX_WIN, ImmutableList.of(baseCostMultiplier));
    final Map<Integer, Integer> responseCounts = new HashMap<>();
    for (int count = 0; count < totalBets; count++) {
        final Tuple2<List<Output>, TestGpasPlatform> result = playWithRealRng(baseCostMultiplier, count, reels, visibleSymbols, stakeCostUuid, testGpasPlatform);

        // If we run out of balance, re-start, we want to do meaningful spins that trigger features, etc
        balance = checkBalance(stake, balance, result._1(), count);

        final int byteLength = result._2.getLastResponse().map(s -> s.getBytes().length).orElse(0);
        final PlayData playData = result._2.getLastResponse().map(s -> new Gson().fromJson(s, GdkPlayData.class)).orElse(new GdkPlayData());
        final java.util.List<SlotsActionData> actionData = playData.findLastPlay().getLastPlayInModeData().getSlotsData().getActions();
        final int sumOfPayouts = actionData.stream()
                                           .map(SlotsActionData::getPayouts)
                                           .mapToInt(java.util.List::size)
                                           .sum();
        responseCounts.putIfAbsent(byteLength, sumOfPayouts);
    }
    return responseCounts;
}

これらの各メソッドの最初の6行のコードは完全に重複していますが、これをどのようにクリーンアップする必要があるか、またはどのようにクリーンアップできるかわかりません。

この問題の拡張は、収集されたデータを除いてすべて同じことを行う2つのメソッド呼び出しチェーンがあり、設計が悪いと思ったためにブール演算子を使用してこの機能を分割する代わりに、それを成し遂げるためのメソッドの新しいチェーンを実装しました。これを別の方法で行う必要がありますか?

Code_Mode:

withCount以下のように、共通のメソッドを1つ作成してタイプを渡すことができます

Map<Integer, Integer> getResponses(int baseCostMultiplier, int reels, int visibleSymbols, String stakeCostUuid, int totalBets, boolean withCount) throws InsufficientFundsException {
    final int stake = getStake(baseCostMultiplier, stakeCostUuid);
    long balance = 10L * stake;
    final TestGpasPlatform testGpasPlatform = TestGpasPlatform.create(ryotaAdapter, TestGpasPlatform.DEFAULT_MIN_BET, Math.max(stake, TestGpasPlatform.DEFAULT_MAX_BET), TestGpasPlatform.DEFAULT_MAX_WIN, ImmutableList.of(baseCostMultiplier));

    final Map<Integer, Integer> responseCounts = new HashMap<>();
    for (int count = 0; count < totalBets; count++) {
        final Tuple2<List<Output>, TestGpasPlatform> result = playWithRealRng(baseCostMultiplier, count, reels, visibleSymbols, stakeCostUuid, testGpasPlatform);
        // If we run out of balance, re-start, we want to do meaningful spins that trigger features, etc
        balance = checkBalance(stake, balance, result._1(), count);
        final int byteLength = result._2.getLastResponse().map(s -> s.getBytes().length).orElse(0);

        if(withCount) {
            responseCounts.putIfAbsent(byteLength, 0);
            responseCounts.put(byteLength, responseCounts.get(byteLength) + 1);
        }else{
            final PlayData playData = result._2.getLastResponse().map(s -> new Gson().fromJson(s, GdkPlayData.class)).orElse(new GdkPlayData());
            final java.util.List<SlotsActionData> actionData = playData.findLastPlay().getLastPlayInModeData().getSlotsData().getActions();
            final int sumOfPayouts = actionData.stream()
                    .map(SlotsActionData::getPayouts)
                    .mapToInt(java.util.List::size)
                    .sum();
            responseCounts.putIfAbsent(byteLength, sumOfPayouts);
        }
    }
    return responseCounts;
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ポリゴンの複数のインスタンスであるRにシェープファイルをインポートする-複数のポリゴンを削除または簡略化するにはどうすればよいですか?

分類Dev

複数のクライアントを受け入れるようにリファクタリングするにはどうすればよいですか?

分類Dev

データがs3の複数のファイルに存在する場合、スクリプトモードでsagemakerのテンソルフローをトレーニングするにはどうすればよいですか?

分類Dev

均一なバッファオブジェクトとインスタンス化されたレンダリングを使用して複数のオブジェクトを描画するにはどうすればよいですか?

分類Dev

Rubyで、ファイルからインスタンス変数の長いリストを維持するにはどうすればよいですか?

分類Dev

Excelで複数のハイパーリンクファイルのパスを変更するにはどうすればよいですか?

分類Dev

複数のジェネリックを含むこの恐ろしい抽象Javaクラスを「より良い」ものにリファクタリングするにはどうすればよいですか?

分類Dev

スクリプトのシバンでインタプリタに複数の引数を許可するにはどうすればよいですか?

分類Dev

シェルスクリプトの複数の拡張子を1行でフィルタリングするにはどうすればよいですか?

分類Dev

NodeJSで複数のシーケンシャルタイミングのhttpsリクエストを送信するにはどうすればよいですか?

分類Dev

このスクリプト化されたJenkinsパイプラインを適切にリファクタリングして、共通のコードを1つのファイルに保存するにはどうすればよいですか?

分類Dev

1 つのインターフェースで複数のサブネットをリンクするにはどうすればよいですか?

分類Dev

Pythonで他の複数のリストに基づいてリストをフィルタリングするにはどうすればよいですか?

分類Dev

クラスから変数のすべてのインスタンスのリストを取得するにはどうすればよいですか?

分類Dev

複数の条件でリスト内包をリファクタリングする

分類Dev

プロトタイプでインスタンス変数を初期化すると、パフォーマンスがどのように向上しますか

分類Dev

Django RESTフレームワークで書き込み可能なネストされたシリアライザーを複製せずに複数のモデルインスタンスを作成するにはどうすればよいですか?

分類Dev

Ubuntu 20.10の同じディレクトリ内のすべてのテキストファイルの最後の行(コンテンツ)の最後にアスタリスク(*)を追加するにはどうすればよいですか?

分類Dev

Ubuntu 20.10の同じディレクトリ内のすべてのテキストファイルの最後の行(コンテンツ)の最後にアスタリスク(*)を追加するにはどうすればよいですか?

分類Dev

カスタムリファクタリングスクリプトを作成するのに最適なJavaライブラリは何ですか?

分類Dev

このJavaインターフェースをSwiftでどのように複製しますか?

分類Dev

より効率的にするために、複数のif…elsesをリファクタリングするにはどうすればよいですか?

分類Dev

get-childitemを取得して複数のファイルタイプでフィルタリングするにはどうすればよいですか?

分類Dev

ファイヤーストアの複数のorderByクエリのインデックスを作成するにはどうすればよいですか?

分類Dev

ActiveRecordで複数のカテゴリで製品をフィルタリングするにはどうすればよいですか?

分類Dev

ファクトリデザインパターンで長さが異なるコンストラクタをどのように処理しますか?

分類Dev

os.walk関数で特定のパスを持つファイルをフィルタリングするにはどうすればよいですか?

分類Dev

重複する複数のインスタンスでサウンドファイルを再生するにはどうすればよいですか?

分類Dev

jgitを使用して既存のリポジトリを新しいgithubインスタンスに複製するにはどうすればよいですか?

Related 関連記事

  1. 1

    ポリゴンの複数のインスタンスであるRにシェープファイルをインポートする-複数のポリゴンを削除または簡略化するにはどうすればよいですか?

  2. 2

    複数のクライアントを受け入れるようにリファクタリングするにはどうすればよいですか?

  3. 3

    データがs3の複数のファイルに存在する場合、スクリプトモードでsagemakerのテンソルフローをトレーニングするにはどうすればよいですか?

  4. 4

    均一なバッファオブジェクトとインスタンス化されたレンダリングを使用して複数のオブジェクトを描画するにはどうすればよいですか?

  5. 5

    Rubyで、ファイルからインスタンス変数の長いリストを維持するにはどうすればよいですか?

  6. 6

    Excelで複数のハイパーリンクファイルのパスを変更するにはどうすればよいですか?

  7. 7

    複数のジェネリックを含むこの恐ろしい抽象Javaクラスを「より良い」ものにリファクタリングするにはどうすればよいですか?

  8. 8

    スクリプトのシバンでインタプリタに複数の引数を許可するにはどうすればよいですか?

  9. 9

    シェルスクリプトの複数の拡張子を1行でフィルタリングするにはどうすればよいですか?

  10. 10

    NodeJSで複数のシーケンシャルタイミングのhttpsリクエストを送信するにはどうすればよいですか?

  11. 11

    このスクリプト化されたJenkinsパイプラインを適切にリファクタリングして、共通のコードを1つのファイルに保存するにはどうすればよいですか?

  12. 12

    1 つのインターフェースで複数のサブネットをリンクするにはどうすればよいですか?

  13. 13

    Pythonで他の複数のリストに基づいてリストをフィルタリングするにはどうすればよいですか?

  14. 14

    クラスから変数のすべてのインスタンスのリストを取得するにはどうすればよいですか?

  15. 15

    複数の条件でリスト内包をリファクタリングする

  16. 16

    プロトタイプでインスタンス変数を初期化すると、パフォーマンスがどのように向上しますか

  17. 17

    Django RESTフレームワークで書き込み可能なネストされたシリアライザーを複製せずに複数のモデルインスタンスを作成するにはどうすればよいですか?

  18. 18

    Ubuntu 20.10の同じディレクトリ内のすべてのテキストファイルの最後の行(コンテンツ)の最後にアスタリスク(*)を追加するにはどうすればよいですか?

  19. 19

    Ubuntu 20.10の同じディレクトリ内のすべてのテキストファイルの最後の行(コンテンツ)の最後にアスタリスク(*)を追加するにはどうすればよいですか?

  20. 20

    カスタムリファクタリングスクリプトを作成するのに最適なJavaライブラリは何ですか?

  21. 21

    このJavaインターフェースをSwiftでどのように複製しますか?

  22. 22

    より効率的にするために、複数のif…elsesをリファクタリングするにはどうすればよいですか?

  23. 23

    get-childitemを取得して複数のファイルタイプでフィルタリングするにはどうすればよいですか?

  24. 24

    ファイヤーストアの複数のorderByクエリのインデックスを作成するにはどうすればよいですか?

  25. 25

    ActiveRecordで複数のカテゴリで製品をフィルタリングするにはどうすればよいですか?

  26. 26

    ファクトリデザインパターンで長さが異なるコンストラクタをどのように処理しますか?

  27. 27

    os.walk関数で特定のパスを持つファイルをフィルタリングするにはどうすればよいですか?

  28. 28

    重複する複数のインスタンスでサウンドファイルを再生するにはどうすればよいですか?

  29. 29

    jgitを使用して既存のリポジトリを新しいgithubインスタンスに複製するにはどうすればよいですか?

ホットタグ

アーカイブ