[英]Find values in a map that ARE NOT in a list of pojos
在我的 REST api 中,我接受了一個看起來像這樣的地圖 -
Map<String, Object> newSettings
-
{
"showGrantsInGrid": false,
"isPrimeUser": true,
"hasRegistered": true
}
我需要將這些設置與現有的設置列表進行比較。 該列表看起來像這樣 -
List<Setting> currentSettings
-
[
{
"settingName": "showGrantsInGrid",
"settingValue": "false",
},
{
"settingName": "isPrimeUser",
"settingValue": "true",
}
]
這就是 Setting 對象的樣子 -
public class Setting {
private String settingName;
private String settingValue;
// getters and setters ...
我試圖弄清楚如何找到發送到 REST api 的地圖中的條目,這些條目不在設置列表中。 在上面的例子中,應該是“hasRegistered”。
到目前為止我嘗試過的一切都沒有奏效。 誰有想法?
你可以這樣做:
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())
)
);
注意:與前一個相比,我不確定它的性能。
首先,您可以通過以下方式獲取 newSettings 的所有鍵:
List<String> newOnes = new ArrayList<>();
Set<String> keys = newSettings.keySet();
for (String key: keys) {
// then, search through the list to see if it contains that name
boolean present = false;
for (Setting setting : currentSettings) {
if (setting.getSettingName().equals(key)) {
present = true;
break;
}
}
if (!present)
newOnes.add(key);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.