在我的 REST api 中,我正在接受一个看起来像这样的 map -
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 的 map 中不在设置列表中的条目。在上面的例子中,它应该是“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())
)
);
注意:与上一个相比,我不确定它的性能。
关于java - 在 map 中查找不在 pojo 列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60840714/