如何在包含字符串值和整数键的映射中搜索部分“值”在 Java 中



>我有以下代码,我正在使用它通过将其转换为字符串并使用contains()方法来搜索地图中的"值"的一部分。问题是如果我搜索任何整数值(例如"4"),conatins() 方法返回 true,因为它找到与"键"匹配。

 public ArrayList<Map<Integer, String>> search(final ArrayList<Map<Integer, String>> myMapList, String searchTerm)
{
    ArrayList<Map<Integer, String>> newListOfMaps = new ArrayList<Map<Integer, String>>();
    for (Map<Integer, String> map : myMapList)
    {
        if (map.toString().contains(searchTerm))
        {
            newListOfMaps.add(map);
        }
    }
    return newListOfMaps;
}

示例数据:

  • myMapList.get(0)= {1=laptop, 2=4, 3=stackover, 4=flow}
  • myMapList.get(1)= {1=laptop, 2=pc, 3=stackover, 4=flow}

情况 1:如果我的"搜索词"是"top",我希望返回两个地图。

情况2:如果我的"搜索词"是"4",我只想返回第一张地图。

但我正在让他们两个回来。

有没有更好的方法来

搜索地图?

我们必须搜索每个映射中的每个值(除非我们使用的是 Java 8 lambda 表达式,我猜)

    public static ArrayList<Map<Integer, String>> search(final ArrayList<Map<Integer, String>> myMapList, String searchTerm)
    {
        ArrayList<Map<Integer, String>> newListOfMaps = new ArrayList<Map<Integer, String>>();
        for (Map<Integer, String> map : myMapList)
        {
            for (String value : map.values())
            {
                if (value.contains(searchTerm)){
                    newListOfMaps.add(map);
                    break;
                }
            }
        }
        return newListOfMaps;
    }
}

可编辑的代码可以在这里找到: https://ideone.com/0Fs6uG

编辑 :使用 lambda 表达式,整个方法可以替换为以下任一方法:

return myMapList.stream().filter(map -> map.values().toString().contains(searchTerm)).collect(Collectors.toList());
return myMapList.stream().filter(map -> map.values().stream().anyMatch(str -> str.contains(searchTerm))).collect(Collectors.toList());

我更喜欢后者,因为当本身包含逗号时,它可以避免困难。

相关内容

  • 没有找到相关文章

最新更新