Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中检查值是否曾经是映射中的键_Java - Fatal编程技术网

如何在java中检查值是否曾经是映射中的键

如何在java中检查值是否曾经是映射中的键,java,Java,我正在使用Map,我想知道是否有可能检查一个值是否作为一个键存在于Map中。 这是地图: Map<String, List<String>> labelIdentifiersmap = new LinkedHashMap<>(); labelIdentifiersmap.put(labelName, labelNameList); 这里的IMOVE和IGET首先用作键,之后它们是Inits的值,类似地FIN是键,之后值用于决赛。是否可以执行检查以查看值是否为

我正在使用Map,我想知道是否有可能检查一个值是否作为一个键存在于Map中。 这是地图:

Map<String, List<String>> labelIdentifiersmap = new LinkedHashMap<>();
labelIdentifiersmap.put(labelName, labelNameList);

这里的
IMOVE
IGET
首先用作
,之后它们是
Inits
,类似地
FIN
,之后
用于
决赛
。是否可以执行检查以查看值是否为映射中的键?

如果要检查
映射中任何值列表中存在的每个

  • 首先将所有值收集到集合对象中
  • 第二个流式处理映射并过滤值中的键

集合mapValues=labelIdentifiersmap.values() labelIdentifiersmap.entrySet() .stream() .filter(entry->mapValues.stream().anyMatch(val->val.contains(entry.getKey())) .map(map.Entry::getKey) .collect(Collectors.toList());
如果要检查
映射中任何值列表中出现的每个

  • 首先将所有值收集到集合对象中
  • 第二个流式处理映射并过滤值中的键

集合mapValues=labelIdentifiersmap.values() labelIdentifiersmap.entrySet() .stream() .filter(entry->mapValues.stream().anyMatch(val->val.contains(entry.getKey())) .map(map.Entry::getKey) .collect(Collectors.toList());
使用流API检查值中的键


  • entrySet
  • 列表的流平面映射为一个流
  • 通过检查值是否作为键存在于映射中进行筛选
  • 列表中收集匹配结果


使用流API检查值中的键


  • entrySet
  • 列表的流平面映射为一个流
  • 通过检查值是否作为键存在于映射中进行筛选
  • 列表中收集匹配结果


这是你的
地图

    Map<String,List<String>> labelIdentifiersmap = new LinkedHashMap<>();

    labelIdentifiersmap.put( "Gets", List.of( "g1", "g2" ) );
    labelIdentifiersmap.put( "IMOVE", List.of( "i1", "i2", "i3", "i8" ) );
    labelIdentifiersmap.put( "IGET", List.of( "i4", "i5", "i6", "i7" ) );
    labelIdentifiersmap.put( "Inits", List.of( "IMOVE", "IGET" ) );
    labelIdentifiersmap.put( "Updates", List.of( "u1", "u2", "u3", "u4", "u5" ) );
    labelIdentifiersmap.put( "FIN", List.of( "f2", "f4", "f5", "f6", "f7" ) );
    labelIdentifiersmap.put( "FINALS", List.of( "FIN", "f1", "f3" ) );

这是你的
地图

    Map<String,List<String>> labelIdentifiersmap = new LinkedHashMap<>();

    labelIdentifiersmap.put( "Gets", List.of( "g1", "g2" ) );
    labelIdentifiersmap.put( "IMOVE", List.of( "i1", "i2", "i3", "i8" ) );
    labelIdentifiersmap.put( "IGET", List.of( "i4", "i5", "i6", "i7" ) );
    labelIdentifiersmap.put( "Inits", List.of( "IMOVE", "IGET" ) );
    labelIdentifiersmap.put( "Updates", List.of( "u1", "u2", "u3", "u4", "u5" ) );
    labelIdentifiersmap.put( "FIN", List.of( "f2", "f4", "f5", "f6", "f7" ) );
    labelIdentifiersmap.put( "FINALS", List.of( "FIN", "f1", "f3" ) );


你可以在地图上使用
.containsKey(key\u元素)
你只能检查一个键当前是否存在,你不能检查它以前是否存在并被删除。为此,你需要保留一个额外的
设置
所有键,并与
地图
同步。你可以使用
.containsKey(key\u元素)
在地图上你只能检查一个密钥当前是否存在,你不能检查它以前是否存在并且是否被删除。要做到这一点,你需要保留一个额外的
所有密钥集
,并将其与
地图
同步。如果
包含密钥
,那么滥用流的时间会更短、更容易。他想检查是否有v列表中的值用作映射中的键是的,我想检查是否有任何值用作映射中的键。@Robert此解决方案适用于“Inits”,谢谢,关于如何使其适用于“Finals”有何建议还有。@SC0DEROOK,让我检查一下,当
包含skey
时,流的滥用会变得更短更容易。他想检查列表中是否有任何值用作映射中的键。是的,我想检查是否有任何值用作映射中的键。@robert此解决方案适用于“Inits”,谢谢,有什么建议可以让我在“决赛”中发挥作用吗还有。@SC0Derook,让我检查一下,当
包含skey
时,流的滥用会变得更短更容易。如果我理解OP问题,他正在试图在值中找到键@Robert如果我错了,你可以纠正我是的,我想检查是否有任何值曾被用作映射中的键。此解决方案适用于“Inits”,有没有关于我如何为“决赛”做这件事的建议还有。谢谢@deadpool此解决方案应该适用于该映射中的每个键,请确保您没有出现任何语法错误@r2d2当
containsKey
时滥用streams会更短、更简单。如果我理解OP问题,他正试图在值中找到键@Robert如果我错了,您可以纠正我是的,我想检查一下任何值都曾被用作映射中的键。此解决方案对“Inits”很有效,关于如何使其对“final”也有效的任何建议。感谢@deadpool此解决方案对该映射中的每个键都有效,请确保您没有出现任何语法错误@r2d2我也尝试了您的解决方案,但对“Inits”也很有效谢谢你给我另一个选择。你有什么建议可以让我在“决赛”中也这么做吗@Klaus@R2D2对于上述代码,输出将为
[IMOVE、FIN、IGET]
根据您的问题,这是预期值。您能告诉我输出中应该如何显示
final
吗?因为它以前从来不是一个值,它只是一个keyYes,我的意思是
FIN`。很抱歉,混淆了。@KlausI也尝试了您的解决方案,但这对于“Inits”也很有效谢谢你给我另一个选择。你有什么建议可以让我在“决赛”中也这么做吗@Klaus@R2D2对于上述代码,输出将为
[IMOVE、FIN、IGET]
根据您的问题,这是预期值。您能告诉我输出中应该如何显示
final
吗?因为它以前从来不是一个值,所以它只是一个keyYes,带有
final~我的意思是
FIN`。很抱歉,混淆了。@Klaus
List<String> result = labelIdentifiersmap.entrySet()
                      .stream()
                      .flatMap(entry -> entry.getValue().stream())
                      .filter(val -> labelIdentifiersmap.containsKey(val))
                      .collect(Collectors.toList());
    public static void main(String[] args) {
        Map<String, List<String>> labelIdentifiersmap = new LinkedHashMap<>();
        labelIdentifiersmap.put("Gets", new ArrayList<>(Arrays.asList("g1", "g2")));
        labelIdentifiersmap.put("IMOVE", new ArrayList<>(Arrays.asList("i1", "i2", "i3", "i8")));
        labelIdentifiersmap.put("IGET", new ArrayList<>(Arrays.asList("i4", "i5", "i6", "i7")));
        labelIdentifiersmap.put("Inits", new ArrayList<>(Arrays.asList("IMOVE", "IGET")));
        labelIdentifiersmap.put("Updates", new ArrayList<>(Arrays.asList("u1", "u2", "u3", "u4", "u5")));
        labelIdentifiersmap.put("FIN", new ArrayList<>(Arrays.asList("f2", "f4", "f5", "f6", "f7")));
        labelIdentifiersmap.put("FINALS", new ArrayList<>(Arrays.asList("FIN", "f1", "f3")));

        List<String> result = labelIdentifiersmap.entrySet()
                      .stream()
                      .flatMap(entry -> entry.getValue().stream())
                      .filter(val -> labelIdentifiersmap.containsKey(val))
                      .collect(Collectors.toList());
        System.out.println(result);
    }
[IMOVE, IGET, FIN]
    Map<String,List<String>> labelIdentifiersmap = new LinkedHashMap<>();

    labelIdentifiersmap.put( "Gets", List.of( "g1", "g2" ) );
    labelIdentifiersmap.put( "IMOVE", List.of( "i1", "i2", "i3", "i8" ) );
    labelIdentifiersmap.put( "IGET", List.of( "i4", "i5", "i6", "i7" ) );
    labelIdentifiersmap.put( "Inits", List.of( "IMOVE", "IGET" ) );
    labelIdentifiersmap.put( "Updates", List.of( "u1", "u2", "u3", "u4", "u5" ) );
    labelIdentifiersmap.put( "FIN", List.of( "f2", "f4", "f5", "f6", "f7" ) );
    labelIdentifiersmap.put( "FINALS", List.of( "FIN", "f1", "f3" ) );
    List<List<String>> lists = new ArrayList<>( labelIdentifiersmap.values() ); // Collect all the values in the map to a List
    Set<String> result = new HashSet<>(); // This result set will contain the keys that are present as values in the map. Set is used here to avoid duplicate results

    for( List<String> content : lists )
    {
        for( String listContent : content )
        {
            if( labelIdentifiersmap.containsKey( listContent ) ) // If the content is available as a key in the map, we add that to result set
            {
                result.add( listContent );
            }
        }
    }

    System.out.println( result.toString() ); // Finally, print the result set.