POJOのリストにないマップ内の値を探します

ssdev:

私のREST APIで、私はマップを受け入れるだとこのようになります -

Map<String, Object> newSettings-

{
  "showGrantsInGrid": false,
  "isPrimeUser": true,
  "hasRegistered": true
}

私は設定の既存のリストにそれらの設定を比較する必要があります。ことは、リストは次のようになります -

List<Setting> currentSettings -

[
  {
    "settingName": "showGrantsInGrid",
    "settingValue": "false",
  },
  {
    "settingName": "isPrimeUser",
    "settingValue": "true",
  }
]

これは、設定対象のルックスが好きなものです -

public class Setting {
    private String settingName;

    private String settingValue;

    // getters and setters ...

私は設定のリストに含まれていないREST APIに送信されたマップであるエントリを検索する方法を把握しようとしています。上記の例では、それは「hasRegistered」でなければなりません。

すべて私がこれまで働いていなかった試みました。誰もが任意のアイデアがありますか?

ハディJ:

あなたはこのように行うことができます。

Set<String> settingNames = currentSettings.stream()
          .map(Setting::getSettingName)
          .collect(Collectors.toSet());

それから

newSettings.keySet().stream()
           .filter(key->!settingNames.contains(key))
           .collect(Collectors.toList());

一歩:

currentSettings.stream()
            .collect(Collectors
                    .collectingAndThen(Collectors
                                    .mapping(Setting::getSettingName, Collectors.toSet()),
                         settingName -> newSettings.keySet().stream()
                              .filter(key -> !settingName.contains(key))
                              .collect(Collectors.toList())
                    )
            );

注:私は以前のものと比べてその性能についてはよく分かりません。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=365121&siteId=1