【发布时间】:2019-11-16 17:01:47
【问题描述】:
我有一个Map<String, Set<String>>。我的要求是获取特定值的所有直接和间接关键对象。
例如,如果数据是这样的:
{
{'Manager'} => ['Jim', 'Michael'],
{'Jim'} => ['jim.halpert@theoffice.com'],
{'Fire Marshal'} => ['Manager', 'Dwight'],
{'Dwight'} => ['dwight.schrute@theoffice.com'],
{'Michael'} => ['michael.scott@theoffice.com']
}
对于输入'michael.scott@theoffice.com',我应该得到低于输出。
['Michael', 'Manager', 'Fire Marshal']
我尝试了以下代码,但它不起作用。请帮帮我。
Map<String, Set<String>> addresses;
String value;//for which we need to search
Set<String> results = new HashSet<String>();
Set<String> names;
do {
names = addresses.entrySet().stream().filter(entry -> {
return entry.getValue().contains(value);
}).map(Map.Entry::getKey).collect(Collectors.toSet());
results.addAll(names);
} while (names != null);
【问题讨论】:
-
你的循环总是搜索相同的
name- 这显然不是你想要的。您必须检查键值的任何值是否在names中 - 最初您必须将name添加到names -
@AKSW,我该怎么做,因为名称可以有多个值。
-
确实使用循环吗?
标签: java collections hashmap java-stream