ストリームを使用して複数の属性でグループ化およびソート:Java 8

Alok Shukla:

MainEntityのリストがあります

public class MainEntity {
private String keyword;
private double cost;
private String company;
}

私はCompanyEntityを持っています

public class CompanyEntity {
    private double cost;
    private String company;
    }

私はに私のリストを変換しようとしていMap<String,List<CompanyEntity>>たキーがされる場所keywordList<CompanyEntity>すべてのコストの平均を持っているとあまりにも並べ替えられます。私はストリームとJava 8でそれをやろうとしています。

入力としての特定のキーワードについて、私はこれを行っています。

List<MainEntity> entityList = keyWordMap.get(entity.getKeyword());
        entityList.add(entity);
        keyWordMap.put(entity.getKeyword(), entityList);

Map<String, Double> average = (keyWordMap.get(keyword)).stream()
            .collect(groupingBy(MainEntity::getCompany,
                    Collectors.averagingDouble(MainEntity::getCtr)));
    result.put(keyword, new ArrayList<>());

    for (Map.Entry<String, Double> entity : average.entrySet()) {
        result.get(keyword).add(new CompanyEntity(entity.getKey(), entity.getValue()));
    }

しかし、私はすべてのキーワードのマップを作成しようとしています。リスト全体を繰り返すことは可能ですか、それとも意味がありますか?現在keyowordMapはのMap<String,MainEntity>リストを反復してやったタイプMainEntityですが、欲しいですMap<String,List<MainEntity>>

ユーザー-賛成票に「ありがとう」と言わないでください。

まず、 keyWordMap

Map<String, List<MainEntity>> keyWordMap = 
            mainEntityList
            .stream()
            .collect(Collectors.groupingBy(MainEntity::getKeyword));

次に、各キーワードについて、CompanyEntity平均値並べ替えのリストを直接取得しmap()、データを変換してリストとして収集するために使用して、マップを反復処理しから、result

Map<String,List<CompanyEntity>> result = ....
for (Map.Entry<String, List<MainEntity> entry : keyWordMap.entrySet()) {
    List<CompanyEntity> list = entry.getValue().stream()
                .collect(groupingBy(MainEntity::getCompany,
                        Collectors.averagingDouble(MainEntity::getCtr)))
                .entrySet()
                .stream()
                .sorted(Comparator.comparing(e -> e.getValue()))
                .map(e -> new CompanyEntity(e.getKey(), e.getValue()))
                .collect(Collectors.toList());
    result.put(entry.getKey(), list);
}

または、これをワンショットで実行したい

Map<String,List<CompanyEntity>> mapData = 
           mainEntityList
            .stream()
            .collect(Collectors.groupingBy(MainEntity::getKeyWord,
                     Collectors.groupingBy(MainEntity::getCtr,
                        Collectors.averagingDouble(MainEntity::getCtr))))
            .entrySet()
            .stream()
            .collect(Collectors.toMap(m -> m.getKey(),
                 m -> m.entrySet()
                       .stream()
                       .sorted(Comparator.comparing(e -> e.getValue()))
                       .map(e -> new CompanyEntity(e.getKey(), e.getValue()))
                       .collect(Collectors.toList())));

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Java8ストリームAPIを使用して複数の属性でオブジェクトをグループ化する

分類Dev

によってグループ化Javaの8ストリームの複数

分類Dev

Java 8を使用して、文字列のソートおよびグループ化されたリストを作成する最も簡潔な方法は何ですか

分類Dev

ストリームを使用してJava8で値の範囲でグループ化する方法

分類Dev

ストリームを使用してJava8で値の範囲でグループ化する方法

分類Dev

Java 8ストリーム結合および複数の値を返す

分類Dev

Javaの8、ラムダ:グループ化されたリストの中にソートし、リストにすべてのグループをマージ

分類Dev

Java 8:複数のフィールドでグループ化し、値に基づいてソートする

分類Dev

Java 8:複数のフィールドでグループ化し、値に基づいてソートする

分類Dev

最小および最大によるJava8ストリームグループ

分類Dev

グループ複数の属性によって、オブジェクトの内部リスト:Javaの8

分類Dev

Java8-ストリームコレクターを使用してマップのリストをグループ化して合計する方法

分類Dev

マップを使用してグループ化するJava8ストリーム/コレクター

分類Dev

Java8ラムダ/トランスフォーメーションを使用して2つのマップを結合およびフラット化

分類Dev

Java8ストリームを使用してシングルパスで複数のアイテムをカウントする

分類Dev

jdk8を使用してArrayList <Object>でグループ化およびフィルタリングする方法

分類Dev

Java 8-リストでグループ化し、その合計数を並べ替えて表示する

分類Dev

ラムダ式を使用してJava 8で複数のストリームと.map関数を使用する方法

分類Dev

フィルターおよびJava 8のストリームを使用して収集、ネストされたコレクションの要素

分類Dev

オプションの属性によるJava8ストリームのグループ化

分類Dev

Javaの8ストリームを使用して複数のリストをトラバースするには?

分類Dev

複数の異なるタイプのリストをループし、Java8ラムダ式を使用して別のリストを作成します

分類Dev

java8ストリームを使用してtoMapをtoListにグループ化する方法

分類Dev

Java 8ストリーム削減メソッドでグローバル変数を使用しない

分類Dev

Java 8を使用してオブジェクトのセットをソートされたリストにグループ化する方法は?

分類Dev

複数のストリームをマージしてソートするjava8

分類Dev

Java 8でストリームを使用して重複キーのエラー修正をマップする

分類Dev

java8ストリームのグループ化複合変数の合計

分類Dev

java8ストリームのグループ化複合変数の合計

Related 関連記事

  1. 1

    Java8ストリームAPIを使用して複数の属性でオブジェクトをグループ化する

  2. 2

    によってグループ化Javaの8ストリームの複数

  3. 3

    Java 8を使用して、文字列のソートおよびグループ化されたリストを作成する最も簡潔な方法は何ですか

  4. 4

    ストリームを使用してJava8で値の範囲でグループ化する方法

  5. 5

    ストリームを使用してJava8で値の範囲でグループ化する方法

  6. 6

    Java 8ストリーム結合および複数の値を返す

  7. 7

    Javaの8、ラムダ:グループ化されたリストの中にソートし、リストにすべてのグループをマージ

  8. 8

    Java 8:複数のフィールドでグループ化し、値に基づいてソートする

  9. 9

    Java 8:複数のフィールドでグループ化し、値に基づいてソートする

  10. 10

    最小および最大によるJava8ストリームグループ

  11. 11

    グループ複数の属性によって、オブジェクトの内部リスト:Javaの8

  12. 12

    Java8-ストリームコレクターを使用してマップのリストをグループ化して合計する方法

  13. 13

    マップを使用してグループ化するJava8ストリーム/コレクター

  14. 14

    Java8ラムダ/トランスフォーメーションを使用して2つのマップを結合およびフラット化

  15. 15

    Java8ストリームを使用してシングルパスで複数のアイテムをカウントする

  16. 16

    jdk8を使用してArrayList <Object>でグループ化およびフィルタリングする方法

  17. 17

    Java 8-リストでグループ化し、その合計数を並べ替えて表示する

  18. 18

    ラムダ式を使用してJava 8で複数のストリームと.map関数を使用する方法

  19. 19

    フィルターおよびJava 8のストリームを使用して収集、ネストされたコレクションの要素

  20. 20

    オプションの属性によるJava8ストリームのグループ化

  21. 21

    Javaの8ストリームを使用して複数のリストをトラバースするには?

  22. 22

    複数の異なるタイプのリストをループし、Java8ラムダ式を使用して別のリストを作成します

  23. 23

    java8ストリームを使用してtoMapをtoListにグループ化する方法

  24. 24

    Java 8ストリーム削減メソッドでグローバル変数を使用しない

  25. 25

    Java 8を使用してオブジェクトのセットをソートされたリストにグループ化する方法は?

  26. 26

    複数のストリームをマージしてソートするjava8

  27. 27

    Java 8でストリームを使用して重複キーのエラー修正をマップする

  28. 28

    java8ストリームのグループ化複合変数の合計

  29. 29

    java8ストリームのグループ化複合変数の合計

ホットタグ

アーカイブ