从具有数组列表的映射中获取值的键?

问题描述 投票:-1回答:1

我正在用Java编写程序。我决定将Map与ArrayList结合使用。

public static Map<String, List<String>> users = new HashMap<>();

因此,我的问题并不那么复杂:如您所见,有一个键(字符串),每个键都有自己的ArrayList。我有一种方法,可以获取我的地图(用户)的一个值。该方法不是那么重要。但是现在我想知道,哪个键(字符串)属于我的值,哪个方法找到了?

java arraylist hashmap key key-value
1个回答
1
投票

没有保持不同的集合作为一种索引(可能是过度使用),没有比遍历所有条目更好的方法了。

使用流

final String searchTerm = "whatever";
final String user = users.entrySet().stream()
    .filter(entry -> entry.getValue().contains(searchTerm))
    .findFirst()
    .map(Map.Entry::getKey)
    .orElseThrow(() -> new RuntimeException("No matching user for " + searchTerm));

命令式

String user = null;
for (Map.Entry<String, List<String>> entry : users.entrySet())
{
    if (entry.getValue().contains(searchTerm))
    {
        user = entry.getKey();
        break;
    }
}
if (user == null)
{
    throw new RuntimeException("No matching user for " + searchTerm); 
}
© www.soinside.com 2019 - 2024. All rights reserved.