Java8のネストされたグループ化

スアン

解決できないと思われる問題が2つあります。1つ目は、ユーザーが渡すことができる1-n個のネストされたグループが存在する可能性がある場所で動的なネストされたグループ化を行う方法が必要です。

2番目の問題は、キーがネストされているのではなく、連結されている場合に結果をフラット化する必要があることです。

私の入力例は次のようになります。

    List<Map<String, String>> fakeData = new LinkedList<>();
    Map<String, String> data1 = new HashMap<>();
    data1.put("ip","10.0.1.0");
    data1.put("uid","root");
    data1.put("group","admin");
    fakeData.add(data1);

    Map<String, String> data2 = new HashMap<>();
    data2.put("ip","10.0.1.1");
    data2.put("uid","tiger");
    data2.put("group","user");
    fakeData.add(data2);

    Map<String, String> data3 = new HashMap<>();
    data3.put("ip","10.0.1.1");
    data3.put("uid","woods");
    data3.put("group","user");
    fakeData.add(data3);

最終結果には、マップキーの連結が含まれます。

{
  "10.0.1.1user": [
    {
      "uid": "tiger",
      "ip": "10.0.1.1",
      "group": "user"
    },
    {
      "uid": "woods",
      "ip": "10.0.1.1",
      "group": "user"
    }
  ],
  "10.0.1.0admin": [
    "uid": "root",
    "ip": "10.0.1.0",
    "group": "admin"
  ]
}

キーは、マップ内のネストされたマップではなく、連結されていることに注意してください。

運がなくても動的にできるグループ化を作成しようとしています。

 fakeData.stream()
                .collect(groupingBy(map -> map.get("ip"),
                        groupingBy(map -> map.get("uuid"),
                                ... nested "n" times)));

これは私が実装しようとしているインターフェースです:

public Map<String, List<Map<String, String>>> doGrouping(List<String> columns, 
                                                   List<Map<String, String>> data);
fps

次のことを試してください。

public Map<String, List<Map<String, String>>> doGrouping(
        List<String> columns,
        List<Map<String, String>> data) {

    return data.stream()
        .collect(Collectors.groupingBy(
            elem -> columns.stream()
                .map(elem::get)
                .collect(Collectors.joining())));
}

まず、dataマップのリストであるをストリーミングしましたストリームのCollectors.groupingBy各要素に対して計算されたキーを使用して、すぐにリストのマップにストリームを収集しました

キーの計算は難しい部分でした。このために、指定されたリストをストリーミングし、columnsこれらの列のそれぞれをストリームの要素の対応する値に変換しました。マッピング関数としてStream.map渡すメソッドを使用してこれを行いましたelem::map最後に、を使用してこの内部ストリームを単一の文字列に収集しました。これCollectors.joiningにより、ストリームの各要素が効率的な方法で最終的な文字列に連結されます。

編集:上記のコードは、のすべての要素columnsがのマップ要素のキーとして存在する場合に適切に機能dataます。より安全にするには、以下を使用します。

return data.stream()
    .collect(Collectors.groupingBy(
        elem -> columns.stream()
            .map(elem::get)
            .filter(Objects::nonNull)
            .collect(Collectors.joining())));

このバージョンでnullは、ストリームから要素が除外されます。これは、一部のマップ要素にcolumnsリストで指定されたキーが含まれていない場合に発生する可能性があります。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

Java8の条件を含むネストされたループ

分類Dev

Java8を使用したネストされたforループでのコード置換の改善

分類Dev

Java8ストリームAPI表現へのネストされたforループ

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

Mongodbの集約とネストされたグループ化

分類Dev

Mongodbの集約とネストされたグループ化

分類Dev

Java8ストリーム-リストへのネストされたマップ

分類Dev

ネストされたループをJava8フラットマップに置き換えます

分類Dev

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

分類Dev

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

分類Dev

Java8ストリームとリストのグループ化

分類Dev

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

分類Dev

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

分類Dev

.netリストはJava8でグループ化されていますか?

分類Dev

ネストされたレベルのJava 8ストリーム最適化

分類Dev

文字列配列のリストをグループ化する方法、Java8またはJava11

分類Dev

Java8ストリームを使用して、複数のif / elseを含む従来のネストされたループを変換

分類Dev

ネストされたループのバグ-java

分類Dev

Java8でグループ化の複雑さ

分類Dev

Java 8-トリプルネストされたforループ

分類Dev

ストリーミングするJava 8のネストされたループ

分類Dev

Linqグループ化とネストされたグループ化

分類Dev

オブジェクトのグループ化java8

分類Dev

Java8のインストール後にJavaプラグインがFirefoxに表示されない

分類Dev

WPFのCollectionViewSourceを使用したネストされたグループ化

分類Dev

ネストされたPOCOを生成するためのlinqグループ化

Related 関連記事

  1. 1

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

  2. 2

    Java8の条件を含むネストされたループ

  3. 3

    Java8を使用したネストされたforループでのコード置換の改善

  4. 4

    Java8ストリームAPI表現へのネストされたforループ

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

    Mongodbの集約とネストされたグループ化

  9. 9

    Mongodbの集約とネストされたグループ化

  10. 10

    Java8ストリーム-リストへのネストされたマップ

  11. 11

    ネストされたループをJava8フラットマップに置き換えます

  12. 12

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

  13. 13

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

  14. 14

    Java8ストリームとリストのグループ化

  15. 15

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

  16. 16

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

  17. 17

    .netリストはJava8でグループ化されていますか?

  18. 18

    ネストされたレベルのJava 8ストリーム最適化

  19. 19

    文字列配列のリストをグループ化する方法、Java8またはJava11

  20. 20

    Java8ストリームを使用して、複数のif / elseを含む従来のネストされたループを変換

  21. 21

    ネストされたループのバグ-java

  22. 22

    Java8でグループ化の複雑さ

  23. 23

    Java 8-トリプルネストされたforループ

  24. 24

    ストリーミングするJava 8のネストされたループ

  25. 25

    Linqグループ化とネストされたグループ化

  26. 26

    オブジェクトのグループ化java8

  27. 27

    Java8のインストール後にJavaプラグインがFirefoxに表示されない

  28. 28

    WPFのCollectionViewSourceを使用したネストされたグループ化

  29. 29

    ネストされたPOCOを生成するためのlinqグループ化

ホットタグ

アーカイブ