在 Java HashMap<String, String[]> 中查找元素
Find element in Java HashMap<String, String[]>
我无法在包含在 HashMap 中的字符串数组中找到一个元素。我有一个 String 确实在这个 String[] 中,但执行以下操作不起作用。
if (groupOuMap.containsValue("someString")) {
groupOu = "someString";
}
我的目标是在找到值的位置找到我的 HashMap 的相应键。
以我的地图示例为例:
nedcard.nl -> ["Wijchen account"]
mic.ad -> ["Ayutthaya4", "Brazil", "Changi", "Dresden", "Guangzhou"]
如果我搜索字符串 Brazil
,我想要一个新的字符串数组:
String[] groupOu = {"mic.ad", "Brazil"};
我也尝试使用 groupOuMap.values().contains()
但没有成功。
我做错了吗?谢谢!
在 Java 中,执行此操作的最简单方法可能只是遍历映射中的每个键值对,并在数组中搜索第一次出现的搜索词即值。找到后,return 键和值。如果没有找到,return null
.
public static String[] keyContainingValue(HashMap<String, String[]> map, String searchFor) {
for (String key : map.keySet()) {
String[] values = map.get(key);
// construct for replicating List.contains() on a primitive array
if (Arrays.stream(values).anyMatch(i -> i.equals(searchFor))) {
return {key, searchFor};
}
}
return null;
}
您可以通过 Stream
s 在 entrySet
上 filter
。
public static String[] search(Map<String, String[]> map, String value){
return map.entrySet().stream()
.filter(e -> Arrays.stream(e.getValue()).anyMatch(value::equals))
.findAny().map(e -> new String[]{e.getKey(), value}).orElse(null);
}
//...
Map<String, String[]> map = Map.of("mic.ad", new String[]{"Ayutthaya4", "Brazil", "Changi", "Dresden", "Guangzhou"}, "nedcard.nl", new String[]{"Wijchen account"});
System.out.println(Arrays.toString(search(map, "Brazil"))); // [mic.ad, Brazil]
我无法在包含在 HashMap 中的字符串数组中找到一个元素。我有一个 String 确实在这个 String[] 中,但执行以下操作不起作用。
if (groupOuMap.containsValue("someString")) {
groupOu = "someString";
}
我的目标是在找到值的位置找到我的 HashMap 的相应键。
以我的地图示例为例:
nedcard.nl -> ["Wijchen account"]
mic.ad -> ["Ayutthaya4", "Brazil", "Changi", "Dresden", "Guangzhou"]
如果我搜索字符串 Brazil
,我想要一个新的字符串数组:
String[] groupOu = {"mic.ad", "Brazil"};
我也尝试使用 groupOuMap.values().contains()
但没有成功。
我做错了吗?谢谢!
在 Java 中,执行此操作的最简单方法可能只是遍历映射中的每个键值对,并在数组中搜索第一次出现的搜索词即值。找到后,return 键和值。如果没有找到,return null
.
public static String[] keyContainingValue(HashMap<String, String[]> map, String searchFor) {
for (String key : map.keySet()) {
String[] values = map.get(key);
// construct for replicating List.contains() on a primitive array
if (Arrays.stream(values).anyMatch(i -> i.equals(searchFor))) {
return {key, searchFor};
}
}
return null;
}
您可以通过 Stream
s 在 entrySet
上 filter
。
public static String[] search(Map<String, String[]> map, String value){
return map.entrySet().stream()
.filter(e -> Arrays.stream(e.getValue()).anyMatch(value::equals))
.findAny().map(e -> new String[]{e.getKey(), value}).orElse(null);
}
//...
Map<String, String[]> map = Map.of("mic.ad", new String[]{"Ayutthaya4", "Brazil", "Changi", "Dresden", "Guangzhou"}, "nedcard.nl", new String[]{"Wijchen account"});
System.out.println(Arrays.toString(search(map, "Brazil"))); // [mic.ad, Brazil]