我有一个哈希表,键是一个字符串,值是数组列表,我想检查“数组列表”是否包含一个值,然后检索该值的键。所以我这样做了:
Collection<ArrayList<String>> emailList = AddressBook.addressMap.values();
Iterator<ArrayList<String>> iterator = emailList.iterator();
使用循环,我可以打印列表,但无法检查它是否等于字符串。我怎样才能访问数组列表中的每个字符串并使用等式
答案 0 :(得分:0)
使用嵌套循环:
for(List<String> list:emailList)
for(String s:list) {
// Logic
}
这将允许您在Collection
的整个ArrayList
中迭代每个String。
答案 1 :(得分:0)
您可以尝试类似的方法。由于哈希图中的值是ArrayList的值,因此您必须遍历arraylist的集合,然后检查arraylist中的字符串:
For (ArrayList list : emailList ){
if(emailList.contains(stringVALUE)){
// do some stuff
}
}
OR
For (ArrayList list : emailList ){
For(String s: list){
if(s.equals(theValueYouAreLookingFor)){
//do some stuff
}
}
}
答案 2 :(得分:0)
您可以使用流来做到这一点。这将为每个包含所需值的映射列表返回所有键。
Map<String, List<String>> map = new HashMap<>();
map.put("list1", Arrays.asList("Apples", "Oranges", "Bananas"));
map.put("list2", Arrays.asList("Grapes", "Kiwi", "Apples"));
map.put("list3", Arrays.asList("Mangos", "Kiwi", "Berries"));
String val = "Kiwi";
List<String> keys = map.entrySet().stream().filter(
entry -> entry.getValue().contains(val)).map(
entry -> entry.getKey()).collect(Collectors.toList());
System.out.println(keys);
它的工作原理如下:
For the search val of Kiwi
This produces the output [list3, list2]
如果您想在找到第一个条目后停下来,可以对其稍加改动。
for (String item : List.of("Apples", "Fish")) {
String key = map.entrySet().stream().filter(
entry -> entry.getValue().contains(item)).map(
entry -> entry.getKey()).findFirst().orElse(
"Not Found");
System.out.println("Key for item " + item + " = " + key);
}
这将产生以下输出。
Key for item Apples = list1
Key for item Fish = Key Not Found
这将使用findFirst
在找到第一个后停止。由于orElse
方法返回可选值,因此可以用来指定默认值,以指示没有列表包含该项目。
您还可以指定并行以使用线程处理这些流。这样可以大大提高处理速度。尤其是如果您有多个内核。
答案 3 :(得分:-1)
请看看:
String key = null;
for (Map.Entry<String, ArrayList<String>> emailListEntry : AddressBook.addressMap.entrySet()) {
for (String email: emailListEntry.getValue()){
if(email.equals("TEST")){
key = emailListEntry.getKey();
break;
}
}
if (key!=null){
break;
}
}
答案 4 :(得分:-1)
Map<String,List> map = new HashMap<>();
map.put( "list1", Arrays.asList( "Hello1", "Hello2" ) );
map.put( "list2", Arrays.asList( "Hi", "Hi2" ) );
for ( String key : map.keySet() ) {
List list = map.get( key );
if ( list.contains( "Hi2" ) ) {
System.out.println( "This key contained the string " + key );
break;
}
}