Java 如何在HashMap中查找元素
可能重复:Java 如何在HashMap中查找元素,java,search,hashmap,Java,Search,Hashmap,可能重复: 嗨,我有一张有年龄的人的名单,我需要找到那些超过30岁的人, 有没有可能在hashmap中搜索?(请注意,我可能还需要寻找其他年龄段的人,因此为了代码简单起见,我不希望使用两个不同的列表) 简而言之:我的目标是找到一种在HashMap中搜索具有特定值的元素的方法 样本列表为 element1 40 element2 4 element3 66 element4 5 我想找到那些值大于40的和那些值大于或等于66的 除了遍历所有值,还有其他方法吗?AHashMap仅提供按键搜索,因
嗨,我有一张有年龄的人的名单,我需要找到那些超过30岁的人, 有没有可能在hashmap中搜索?(请注意,我可能还需要寻找其他年龄段的人,因此为了代码简单起见,我不希望使用两个不同的列表) 简而言之:我的目标是找到一种在HashMap中搜索具有特定值的元素的方法 样本列表为
element1 40
element2 4
element3 66
element4 5
我想找到那些值大于40的和那些值大于或等于66的
除了遍历所有值,还有其他方法吗?A
HashMap
仅提供按键搜索,因此您必须遍历整个集合并过滤不需要的元素
您可以使用for each循环执行此操作:
for (Entry<MyKey,MyValue> e : map.entrySet()) {
if (e.getValue() >= 40) { ....} //e.getKey() is an element with the needed value
if (e.getValue() >= 66) { ... }
}
for(条目e:map.entrySet()){
如果(e.getValue()>=40){..}//e.getKey()是具有所需值的元素
如果(e.getValue()>=66){…}
}
另一种方法是持有一个从值映射到与其相关的元素并使用(注意,如果您可能有重复值,
NavigableMap
的值应该是一个列表
)aHashMap
仅提供按键搜索,因此,您必须迭代整个集合并过滤不需要的元素
您可以使用for each循环执行此操作:
for (Entry<MyKey,MyValue> e : map.entrySet()) {
if (e.getValue() >= 40) { ....} //e.getKey() is an element with the needed value
if (e.getValue() >= 66) { ... }
}
for(条目e:map.entrySet()){
如果(e.getValue()>=40){..}//e.getKey()是具有所需值的元素
如果(e.getValue()>=66){…}
}
另一种选择是持有一个从值映射到与其相关的元素并使用(注意,如果您可能有重复值,
NavigableMap
的值应该是一个列表
)您可以像这样迭代键值:
Iterator<String> it = hm.keySet().iterator();
while (it.hasNext()){
String key = it.next();
if (hm.get(key) >= 40) {
// do some stuff...
}
}
Iterator it=hm.keySet().Iterator();
while(it.hasNext()){
String key=it.next();
如果(hm.get(键)>=40){
//做些事情。。。
}
}
您可以像这样迭代键值:
Iterator<String> it = hm.keySet().iterator();
while (it.hasNext()){
String key = it.next();
if (hm.get(key) >= 40) {
// do some stuff...
}
}
Iterator it=hm.keySet().Iterator();
while(it.hasNext()){
String key=it.next();
如果(hm.get(键)>=40){
//做些事情。。。
}
}
用番石榴,你可以做以下几点
import com.google.common.base.Predicate;
import com.google.common.collect.Maps;
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("element1", 40);
map.put("element2", 4);
map.put("element3", 66);
map.put("element4", 5);
Map<String, Integer> filteredMap = Maps.filterValues(map,
Predicates.equalTo(66));
}
import com.google.common.base.Predicate;
导入com.google.common.collect.Maps;
公共静态void main(字符串[]args){
Map Map=newhashmap();
地图放置(“元素1”,40);
地图放置(“元素2”,4);
地图放置(“元素3”,66);
地图放置(“元素4”,5);
Map filteredMap=Maps.filterValues(Map,
谓语:equalTo(66));
}
由于您所需的年龄可能会更改,因此您可以使用一个用于筛选的AgePredicate
class AgePredicate implements Predicate<Integer> {
int minAge;
public AgePredicate(int minAge) {
super();
this.minAge = minAge;
}
@Override
public boolean apply(Integer age) {
return age > minAge;
}
}
类AgePredicate实现谓词{
内特米纳奇;
公共年龄谓词(int minAge){
超级();
this.minAge=minAge;
}
@凌驾
公共布尔应用(整数年龄){
回归年龄>minAge;
}
}
并在过滤器中使用它,如下所示
Map<String, Integer> filteredMap = Maps.filterValues(map,new AgePredicate(66));
Map filteredMap=Maps.filterValues(Map,newagepredicate(66));
用番石榴,你可以做以下几点
import com.google.common.base.Predicate;
import com.google.common.collect.Maps;
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("element1", 40);
map.put("element2", 4);
map.put("element3", 66);
map.put("element4", 5);
Map<String, Integer> filteredMap = Maps.filterValues(map,
Predicates.equalTo(66));
}
import com.google.common.base.Predicate;
导入com.google.common.collect.Maps;
公共静态void main(字符串[]args){
Map Map=newhashmap();
地图放置(“元素1”,40);
地图放置(“元素2”,4);
地图放置(“元素3”,66);
地图放置(“元素4”,5);
Map filteredMap=Maps.filterValues(Map,
谓语:equalTo(66));
}
由于您所需的年龄可能会更改,因此您可以使用一个用于筛选的AgePredicate
class AgePredicate implements Predicate<Integer> {
int minAge;
public AgePredicate(int minAge) {
super();
this.minAge = minAge;
}
@Override
public boolean apply(Integer age) {
return age > minAge;
}
}
类AgePredicate实现谓词{
内特米纳奇;
公共年龄谓词(int minAge){
超级();
this.minAge=minAge;
}
@凌驾
公共布尔应用(整数年龄){
回归年龄>minAge;
}
}
并在过滤器中使用它,如下所示
Map<String, Integer> filteredMap = Maps.filterValues(map,new AgePredicate(66));
Map filteredMap=Maps.filterValues(Map,newagepredicate(66));
Google Guava有一个关于NavigableMultiMap的未决问题:(Google Guava有一个关于NavigableMultiMap的未决问题:(