ネストされたforeachをJava8ストリームにリファクタリングする

SK '

内側のループが条件を満たす場合、最終的なリストを作成するためにループする2つのリストがあります。

private List<Enum> getEnumFromType(List<Bean.Var> vars, List<Enum> enums) {
    List<Enum> enumList = new ArrayList<>();

    for (Bean.Var var : vars) {
        String typeWithoutTypeIdentifierPrefix = var.getType().substring(1,var.getType().length());
        for (Enum enumVal : enums) {
            if (typeWithoutTypeIdentifierPrefix.equals(enumVal.getName())) {
                if (!enumList.contains(enumVal)) {
                    enumList.add(enumVal);
                }
            }
        }
    }

    return enumList;
}

最新のJava8ストリーミングAPIを使用するようにコードをリファクタリングし、次のことを思いつきました。

vars.stream().forEach(
    var -> {
            String typeWithoutPrimitiveIdentifier = var.getType().substring(1,var.getType().length());

            enums.stream()
                    .filter(enumVal -> typeWithoutPrimitiveIdentifier(enumVal.getName()))
                    .forEach(enumVal -> {

                if (!enumList.contains(enumVal)) {
                    enumList.add(enumVal);
                }
        });
    }
);

これをさらに一歩進めて、ネストされたforeach()メソッドを削除するにはどうすればよいですか?

アレクシスC。

内部stream().forEach(..)への呼び出しで使用する場合の問題(外部インスタンスを変更するため)は、誰かがストリームを並列に切り替え、コレクションがスレッドセーフでない場合、同時実行の問題が発生しやすいことです。addforEachenumList

代わりに、変更可能な削減に適した収集アプローチを優先する必要があります。

private Set<Enum> getEnumFromType(List<Bean.Var> vars, List<Enum> enums) {
    return vars.stream()
               .map(var -> var.getType().substring(1))
               .map(v -> enums.stream().filter(e -> v.equals(e.getName())).findAny())
               .filter(Optional::isPresent)
               .map(Optional::get)
               .collect(toSet());
}

String -> Enum複数のフィルタリングを回避するために、事前にマッピングを作成することもできます。

private Set<Enum> getEnumFromType(List<Bean.Var> vars, List<Enum> enums) {
    Map<String, Enum> enumsName = enums.stream().collect(toMap(Enum::getName, e -> e, (e1, e2) -> e1));
    return vars.stream()
               .map(var -> var.getType().substring(1))
               .map(enumsName::get)
               .filter(Objects::nonNull)
               .collect(toSet());
}

本当にを返したい場合はList、を見ることができますCollectors.collectingAndThen

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

ラムダプロダクションを使用してJava8でネストされたストリームをフィルタリングする方法

分類Dev

Java8ストリームを使用したリストのリファクタリング作成

分類Dev

Java8ストリームを使用したリストのリファクタリング作成

分類Dev

Java8ストリームでループと条件をリファクタリングする

分類Dev

ネストされたループをラムダ式にリファクタリングする

分類Dev

Java8ストリーム-ネストされたリストを階層的にソートする

分類Dev

ネストされたルックアップにJava8ストリームAPIを使用する

分類Dev

ネストされたループをJava8ストリームに変換する

分類Dev

ネストされたループをJava8ストリームに変換する

分類Dev

Java8ストリームでマップされた値を持つリストのネストされたグループ化を取得する方法

分類Dev

Java8ストリーム-リストをフィルタリングして値を取得する方法

分類Dev

Java8-異なるコレクションを持つネストされたForEachのストリーム

分類Dev

ネストされたオブジェクトのフィルタリングjava8

分類Dev

ブロッキングキューによってバックアップされたJava8ストリームによってデータストリームを読み取るようにRSocketに指示する方法

分類Dev

ループごとにネストされたリファクタリング

分類Dev

Java8内のストリームとネストされたリスト

分類Dev

ネストされたスイッチケース(Java)またはいつ(Kotlin)をリファクタリングする方法?

分類Dev

Java8ストリームを使用したリストのフィルタリング

分類Dev

ネストされたコレクションを最小/最大でフィルタリングするJavaストリーム

分類Dev

Javaストリームでフィルタリングされた値をログに記録する方法

分類Dev

ポリモーフィズム/継承を使用して、ネストされたifステートメントをPythonのクラスにリファクタリングする

分類Dev

forループをストリームにリファクタリングする

分類Dev

Java8オプションとストリームのネストされたnullチェック

分類Dev

HTTPステータス500-リクエストの処理に失敗しました。ネストされた例外は、サービスクラスをリファクタリングした後のjava.lang.NullPointerExceptionです

分類Dev

ScalaでネストされたOption.foldsをリファクタリングする方法は?

分類Dev

ネストされた関数を矢印関数でリファクタリングする

分類Dev

ネストされたデータフレーム(リスト列)をpurrrを使用してリスト内の値でフィルタリングする

分類Dev

Java8ストリーム-最大のネストされたリストを検索

分類Dev

ネストされたデータ構造でJava8ストリームを使用してマップを作成する

Related 関連記事

  1. 1

    ラムダプロダクションを使用してJava8でネストされたストリームをフィルタリングする方法

  2. 2

    Java8ストリームを使用したリストのリファクタリング作成

  3. 3

    Java8ストリームを使用したリストのリファクタリング作成

  4. 4

    Java8ストリームでループと条件をリファクタリングする

  5. 5

    ネストされたループをラムダ式にリファクタリングする

  6. 6

    Java8ストリーム-ネストされたリストを階層的にソートする

  7. 7

    ネストされたルックアップにJava8ストリームAPIを使用する

  8. 8

    ネストされたループをJava8ストリームに変換する

  9. 9

    ネストされたループをJava8ストリームに変換する

  10. 10

    Java8ストリームでマップされた値を持つリストのネストされたグループ化を取得する方法

  11. 11

    Java8ストリーム-リストをフィルタリングして値を取得する方法

  12. 12

    Java8-異なるコレクションを持つネストされたForEachのストリーム

  13. 13

    ネストされたオブジェクトのフィルタリングjava8

  14. 14

    ブロッキングキューによってバックアップされたJava8ストリームによってデータストリームを読み取るようにRSocketに指示する方法

  15. 15

    ループごとにネストされたリファクタリング

  16. 16

    Java8内のストリームとネストされたリスト

  17. 17

    ネストされたスイッチケース(Java)またはいつ(Kotlin)をリファクタリングする方法?

  18. 18

    Java8ストリームを使用したリストのフィルタリング

  19. 19

    ネストされたコレクションを最小/最大でフィルタリングするJavaストリーム

  20. 20

    Javaストリームでフィルタリングされた値をログに記録する方法

  21. 21

    ポリモーフィズム/継承を使用して、ネストされたifステートメントをPythonのクラスにリファクタリングする

  22. 22

    forループをストリームにリファクタリングする

  23. 23

    Java8オプションとストリームのネストされたnullチェック

  24. 24

    HTTPステータス500-リクエストの処理に失敗しました。ネストされた例外は、サービスクラスをリファクタリングした後のjava.lang.NullPointerExceptionです

  25. 25

    ScalaでネストされたOption.foldsをリファクタリングする方法は?

  26. 26

    ネストされた関数を矢印関数でリファクタリングする

  27. 27

    ネストされたデータフレーム(リスト列)をpurrrを使用してリスト内の値でフィルタリングする

  28. 28

    Java8ストリーム-最大のネストされたリストを検索

  29. 29

    ネストされたデータ構造でJava8ストリームを使用してマップを作成する

ホットタグ

アーカイブ