如何在 HashMap 中查找映射到 List 的键包含给定字符串的值
我有一张地图,上面有宠物主人的名字和钥匙以及列表
宠物的价值。
我想获取拥有仓鼠的人的名字。
Map<String, List<String>> map = new HashMap<>();
List<String> list = new ArrayList<>();
list.add("dog");
map.put("Pesho", list);
list.clear();
list.add("dog");
list.add("cat");
map.put("Anne", list);
list.clear();
list.add("iguana");
list.add("hamster");
list.add("turtle");
map.put("Kate", list);
// The stream only returns if someone in the map has a hamster
System.out.println(map.values().stream()
.anyMatch(pets -> pets.contains("hamster")));
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
迭代需要在条目集或键集上完成,不可能访问< em>key 当只有一个值时。
anyMatch()
操作返回一个boolean
值。您需要使用findFirst()
获取单个结果,或使用collect()
获取名称的集合。在这两种情况下,来自anyMatch()
的谓词都需要放入filter()
操作中。终端操作
findFirst()
返回Optional
,因为结果可能不存在。您可以通过不同的方式从可选值中提取值,例如,通过应用get()
,但在可选值为空的情况下,它将抛出NoSuchElementException
。在下面的示例中,方法orElse()
用于提供默认值。操作
collect()
需要一个参数Collector
(一个负责填充可变容器的对象,例如包含流元素的集合 )。注意:
list.clear();
,而是需要创建一个新列表,以便每个键都对应于不同的宠物名称集合。ArrayList
替换为HashSet
(即 map 将被声明为Map),搜索性能将会更高。字符串>>
)。Iteration needs to be done over the entry set or over the key set, it is impossible to access a key when have only a value.
Operation
anyMatch()
returns aboolean
value. You need to use eitherfindFirst()
to get a single result, orcollect()
to obtain a collection of names. In both cases, the predicate from theanyMatch()
needs to be placed into thefilter()
operation.Terminal operation
findFirst()
returnsOptional
because a result might not be present. You can extract a value from the optional in different ways, for instance, by applyingget()
, but in the case of empty optional it'll throwNoSuchElementException
. In the example below, methodorElse()
is used to provide a default value.Operation
collect()
expects as a parameterCollector
(an object that is responsible for populating a mutable container, like a collection with elements of the stream).Note:
list.clear();
need to create a new list so that every key will correspond to a distinct collection of pet-names.ArrayList
with aHashSet
(i.e. map will be declared asMap<String,Set<String>>
).