Java 搜索存储在HashMap中的ArrayList中的值

Java 搜索存储在HashMap中的ArrayList中的值,java,search,arraylist,hashmap,Java,Search,Arraylist,Hashmap,我试图找出如何检索存储在ArrayList中的值,存储在Hashmap中 以下是我所拥有的: HashMap<String, ArrayList<Record>> records = new HashMap<>(); 本质上,我希望循环遍历ArrayList中的所有值,以查看该记录ID是否存在,如果存在,我将存储该键并计算一些内容。我该怎么做 编辑:在发布这个问题之后,我想我已经了解了一些事情。这个怎么样: Set<Map.Entry<Strin

我试图找出如何检索存储在ArrayList中的值,存储在Hashmap中

以下是我所拥有的:

HashMap<String, ArrayList<Record>> records = new HashMap<>();
本质上,我希望循环遍历ArrayList中的所有值,以查看该记录ID是否存在,如果存在,我将存储该键并计算一些内容。我该怎么做

编辑:在发布这个问题之后,我想我已经了解了一些事情。这个怎么样:

Set<Map.Entry<String, ArrayList<Record>>> entrySet = records.entrySet();
for(Map.Entry<String, ArrayList<Record>> data : entrySet)
{
    for(Record entry : data.getValue())
    {
        if(recordId.equals(entry.getRecordId()))
        {
            // Do something here
            return "";
        }
    }
}
Set entrySet=records.entrySet();
for(Map.Entry数据:entrySet)
{
for(记录条目:data.getValue())
{
if(recordId.equals(entry.getRecordId()))
{
//在这里做点什么
返回“”;
}
}
}

如果已找到记录ID,我需要保留循环,因为记录ID是唯一的。

您可以在此处使用
Hashmap.entrySet()
获取所有键的列表,并迭代该键集,并检查该特定迭代的数组列表中是否存在
recordId
,然后存储密钥并进行计算


如果您不确定
entrySet
的语法和用法,那么您可以在这里查看它-

您可以在这里使用
Hashmap.entrySet()
获取所有键的列表,并遍历该键集,并检查该特定迭代的ArrayList中是否存在
recordId
,然后存储密钥并进行计算


如果您不确定
entrySet的语法和用法,则可以在此处查看-

您可以使用以下语法:

records.forEach((k, v) -> {
    if (v.contains(recordId)) {
        // do something with 'k'
    }
});
这里我们使用
forEach
在地图上迭代。
k
代表键,
v
代表值。您也可以使用
entrySet

records.entrySet().forEach(e -> {
    if (e.getValue().contains(recordId)) {
        // do something with 'e.getKey()'
    }
});

您可以使用以下语法:

records.forEach((k, v) -> {
    if (v.contains(recordId)) {
        // do something with 'k'
    }
});
这里我们使用
forEach
在地图上迭代。
k
代表键,
v
代表值。您也可以使用
entrySet

records.entrySet().forEach(e -> {
    if (e.getValue().contains(recordId)) {
        // do something with 'e.getKey()'
    }
});
for(地图条目数据:记录){
ArrayList=(ArrayList)data.getValue();
对于(int i=0;i
用于(地图条目数据:记录){
ArrayList=(ArrayList)data.getValue();
对于(int i=0;i
如果您使用的是
Java8
,那么您可以使用
stream

//List of keys which contains your desired Record at it's value(ArrayList)
List<String> requiredListOfKeys = records.keySet().stream()
                                                  .filter(x -> records.get(x)
                                                  .contains(record))
                                                  .collect(Collectors.toList());
//按其值包含所需记录的键列表(ArrayList)
List requiredListOfKeys=records.keySet().stream()
.filter(x->records.get(x)
.包含(记录))
.collect(Collectors.toList());

如果您使用的是
Java8
,那么您可以使用
stream

//List of keys which contains your desired Record at it's value(ArrayList)
List<String> requiredListOfKeys = records.keySet().stream()
                                                  .filter(x -> records.get(x)
                                                  .contains(record))
                                                  .collect(Collectors.toList());
//按其值包含所需记录的键列表(ArrayList)
List requiredListOfKeys=records.keySet().stream()
.filter(x->records.get(x)
.包含(记录))
.collect(Collectors.toList());

一种方法是对地图值进行流式处理,对于每个值(这是一个列表),对其进行流式处理并找到与搜索条件匹配的第一个
记录
实例。然后,如果找到了这样的记录,可以对其执行任何操作:

boolean found = records.values().stream()
    .flatMap(List::stream) // or .flatMap(list -> list.stream())
    .filter(entry -> recordId.equals(entry.getRecordId()))
    .findFirst()
    .ifPresent(entry -> {
        // do something with the found record
    });

一种方法是对映射值进行流式处理,对于每个值(这是一个列表),对其进行流式处理并找到第一个符合搜索条件的
Record
实例。然后,如果找到了这样的记录,可以对其执行任何操作:

boolean found = records.values().stream()
    .flatMap(List::stream) // or .flatMap(list -> list.stream())
    .filter(entry -> recordId.equals(entry.getRecordId()))
    .findFirst()
    .ifPresent(entry -> {
        // do something with the found record
    });

你想在记录和返回键、记录列表或什么中找到一些id吗?你想在记录和返回键、记录列表或什么中找到一些id吗?这个lambda表达式很棒!编辑了我的原始帖子,你能验证我所做的是正确的吗?是的,是的。如果我的回答有帮助,请投票并接受!Break将只退出1个循环。这里的问题是
contains
将始终返回
false
,因为您正在将
您的\u id
(一个字符串)与数组列表的每个元素(一个
记录
实例)进行比较。对!我在IDE中用String检查了它,因为我没有Record类:),但我想他明白了。感谢您的帮助,我进行了编辑。如果在ArrayList中找到了该记录,那么我需要修改一些字段并返回。我认为嵌套的foreach循环在这种情况下更合适。这个lambda表达式很棒!编辑了我的原始帖子,你能验证我所做的是正确的吗?是的,是的。如果我的回答有帮助,请投票并接受!Break将只退出1个循环。这里的问题是
contains
将始终返回
false
,因为您正在将
您的\u id
(一个字符串)与数组列表的每个元素(一个
记录
实例)进行比较。对!我在IDE中用String检查了它,因为我没有Record类:),但我想他明白了。感谢您的帮助,我进行了编辑。如果在ArrayList中找到了该记录,那么我需要修改一些字段并返回。我认为嵌套的foreach循环在这种情况下更合适。