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