繁体   English   中英

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

[英]Searching for a value in an ArrayList that is stored in a HashMap

我试图弄清楚如何检索存储在Hashmap中的ArrayList中存储的值。

这是我所拥有的:

HashMap<String, ArrayList<Record>> records = new HashMap<>();

该哈希图中的关键不是我想要的。 有一个名为Record对象里面的方法getRecordId()我希望能够评估该与否recordId ,通过if语句,存在于ArrayList中。

例:

if(records.values.exists(recordId)){ ...do something ...}

本质上,我想遍历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 "";
        }
    }
}

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

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

如果你不能确定的语法和用法entrySet那么你可以考虑在这里- https://www.geeksforgeeks.org/iterate-map-java/

您可以使用以下语法:

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 (Map.Entry<String, ArrayList> data : records) {
            ArrayList list = (ArrayList) data.getValue();
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).equals(recordId)) {
                    // do something
                }
            }
        }

如果您使用的是Java 8 ,则可以使用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());

一种方法是流式传输地图值,并为每个值(这是一个列表)流式传输地图值,并找到第一个与您的搜索条件匹配的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
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM