Map.containsValue() 返回错误
Map.containsValue() returning false
我有一张地图如下:
final Map<myobj,Set<String>> existingNames = this.getExistingCIs(_actual,_names.keySet());
它returns:
{myobj43c0e17f0100000606@3508cfdf=[Immutable]}
我正在尝试检查地图值是否包含字符串 "Immutable" 然后我正在尝试做进一步的逻辑。但是 existingNames.containsValue("Immutable")
抛出 false
:
if (existingNames.containsValue("Immutable")) {
// mylogic
}
是因为Set<String>
吗?如果是这样如何检查这个?我想我在比较时做错了什么。我只有 Java 的基本知识,不知道如何转换集合来检查字符串。
您需要检查每个集合是否包含该值。您可以在 Set java 文档中找到它:https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#contains(java.lang.Object)
你可以这样做:
for (Set<String> names: existingNames.values()) {
if (names.contains("Immutable")) { /* your logic*/ }
}
检查任何集是否包含值的简单方法是
existingNames.values().stream().anyMatch(s -> s.contains("Immutable"))
如果你想检查集合是否是包含字符串的单例,那么你可以创建一个内联集合:
existingNames.containsValue(Collections.singleton("Immutable"))
前面已经说过,你将map的值与String
进行比较,但是map的定义是Map<myobj, Set<String>>
,因此直接与值Set<String>
进行比较不会按照您的方式工作。
这里是 java-8 compliant way using java-stream, the key method is Stream::anyMatch
其中 returns true
流的任何元素是否匹配提供的谓词。
要在 Set
中查找元素,请使用 Set::contains
:
existingNames.values().stream().anyMatch(set -> set.contains("Immutable"))
我有一张地图如下:
final Map<myobj,Set<String>> existingNames = this.getExistingCIs(_actual,_names.keySet());
它returns:
{myobj43c0e17f0100000606@3508cfdf=[Immutable]}
我正在尝试检查地图值是否包含字符串 "Immutable" 然后我正在尝试做进一步的逻辑。但是 existingNames.containsValue("Immutable")
抛出 false
:
if (existingNames.containsValue("Immutable")) {
// mylogic
}
是因为Set<String>
吗?如果是这样如何检查这个?我想我在比较时做错了什么。我只有 Java 的基本知识,不知道如何转换集合来检查字符串。
您需要检查每个集合是否包含该值。您可以在 Set java 文档中找到它:https://docs.oracle.com/javase/7/docs/api/java/util/Set.html#contains(java.lang.Object)
你可以这样做:
for (Set<String> names: existingNames.values()) {
if (names.contains("Immutable")) { /* your logic*/ }
}
检查任何集是否包含值的简单方法是
existingNames.values().stream().anyMatch(s -> s.contains("Immutable"))
如果你想检查集合是否是包含字符串的单例,那么你可以创建一个内联集合:
existingNames.containsValue(Collections.singleton("Immutable"))
前面已经说过,你将map的值与String
进行比较,但是map的定义是Map<myobj, Set<String>>
,因此直接与值Set<String>
进行比较不会按照您的方式工作。
这里是 java-8 compliant way using java-stream, the key method is Stream::anyMatch
其中 returns true
流的任何元素是否匹配提供的谓词。
要在 Set
中查找元素,请使用 Set::contains
:
existingNames.values().stream().anyMatch(set -> set.contains("Immutable"))