【问题标题】:how to check a value present inside the map in JAVA如何在 JAVA 中检查地图中存在的值
【发布时间】:2019-08-11 23:33:23
【问题描述】:

我想搜索地图中是否存在的值 我有这样的地图

 Map<String, Object> eMap = new HashMap<String, Object>();
 Set<String> wList = new HashSet<>();
 eMap.put("DATA LIST", wList);

假设集合包含 ['aaa', 'bbb']; 如何检查地图中的“aaa”?

谢谢。 :)

【问题讨论】:

  • 不能是Map&lt;String, List&lt;String&gt;&gt;吗?那会容易得多

标签: java regex dictionary for-loop set


【解决方案1】:

您可以通过以下方式检查:

使用 Java 8

public static boolean checkValueExists(Map<String, Object> eMap, String searchedValue){
    return eMap.values().parallelStream()
            .flatMap(set -> ((Set<String>)set).stream())
            .anyMatch(set -> set.contains(searchedValue));
}

正常方式

public static boolean checkValueExists(Map<String, Object> eMap, String searchedValue){
            for (Map.Entry<String, Object> item : eMap.entrySet()) {
                String key = item.getKey();
                Set<String> setValue = (Set<String>) item.getValue();

                if(setValue.contains(searchedValue)){
                    return true;
                }

            }
            return false;
        }

这里你必须重复Map&lt;String, Object&gt; eMap。获取其值为Set&lt;String&gt;。现在你必须在setValue 上搜索searchedValue

这是数据集:

Map<String, Object> eMap = new HashMap<>();
        Set<String> numberList = new HashSet<>();
        numberList.add("Number 1");
        numberList.add("Number 2");
        numberList.add("Number 3");
        eMap.put("Number LIST", numberList);


        Set<String> fruitList = new HashSet<>();
        fruitList.add("Apple");
        fruitList.add("Banana");
        fruitList.add("Tomato");
        eMap.put("Fruit LIST", fruitList);

        String searchedValue="Number 3";

        System.out.println("Is Value exists :"+checkValueExists(eMap,searchedValue));

【讨论】:

  • 如果没有实际使用理由,我会反对使用parallelStream() 反对stream()
【解决方案2】:

在您的示例中,eMap 的类型为 Map&lt;String, List&lt;String&gt;&gt;。那会容易很多。然后你必须遍历值来检查:

eMap.values().stream().anyMatch(l -> l.contains("aaa"));

以及地图的定义:

Map<String, Set<String>> eMap = new HashMap<>();

【讨论】:

  • 我认为应该是Map&lt;String, Set&lt;String&gt;&gt; 而不是Map&lt;String, List&lt;String&gt;&gt;
【解决方案3】:
    Map<String, Set<String>> eMap = new HashMap<>();
    Set<String> wList = new HashSet<>();
    wList.add("aaa");
    wList.add("bbb");

    eMap.put("DATA LIST", wList);

    System.out.println(
            eMap.values().parallelStream().flatMap(set -> set.stream()).anyMatch(set -> set.contains("bbb")));

如果您想在地图集中搜索值,那么它的工作方式如下。 您将所有集合平面映射到一个流,然后检查您搜索的值是否存在。

我也推荐使用

Map<String, Set<String>> 

而不是

Map<String, Object>

因为那样你就不需要强制转换(类型安全)

【讨论】:

    【解决方案4】:

    您可以使用 Java 8 流 API 功能。 eMap.entrySet().stream().filter(e -&gt; e.getValue().contains('aaa'))

    然后可以将数据存储在新的地图或列表中或任何您想要的方式中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      相关资源
      最近更新 更多