gpt4 book ai didi

java - 如何在 Java 中搜索包含字符串值和整数键的映射中的部分 "value"?

转载 作者:行者123 更新时间:2023-11-30 06:55:51 26 4
gpt4 key购买 nike

我有以下代码,通过将其转换为字符串并使用 contains() 方法,我使用这些代码在 Map map 中搜索“值”的一部分。问题是,如果我搜索任何整数值(例如“4”),conatins() 方法会返回 true,因为它找到了与“key”的匹配项。

 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:如果我的“searchTerm”是“top”,我希望返回两个 map 。

情况 2:如果我的“searchTerm”是“4”,我只想返回第一张 map 。

但我要把它们都找回来。

有没有更好的方法在 map 中搜索?

最佳答案

我们必须在每个映射中搜索每个值(我猜除非我们使用 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());

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

关于java - 如何在 Java 中搜索包含字符串值和整数键的映射中的部分 "value"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34855866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com