Mar*_*uca 4 java dictionary list java-8 java-stream
在Java 7中我有
Map<String, List<String>> m = new HashMap<String, List<String>>();
boolean result = false;
m.put("Name1", Arrays.asList("abc*1"));
m.put("Name2", Arrays.asList("abc@*1"));
for (Map.Entry<String, List<String>> me : m.entrySet()) {
String key = me.getKey();
List<String> valueList = me.getValue();
if (key.equals("Name2"){
System.out.print("Values: ");
for (String s : valueList) {
if(s.contains("@"){
result = true;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Name2如果它包含@使用任何匹配,我怎么能得到一个bool结果呢?
我尝试使用以下代码,但我不知道如何使用IT来获取特定密钥
result = m.values().stream().anyMatch(v -> v.contains("@"))
Run Code Online (Sandbox Code Playgroud)
请执行下列操作:
boolean result = m.getOrDefault("Name2", Collections.emptyList()).stream()
.anyMatch(i -> i.contains("@"));
Run Code Online (Sandbox Code Playgroud)
如果Map包含正确的密钥,请检查Listas值的任何元素是否包含特定字符.如果Map不包含密钥,则模拟Collection完全不包含任何内容的空,并自动计算结果false.
编辑:正如@Michael建议的那样,使用Collections.emptyList()是比较好的选择new ArrayList<>().
您可以简单地使用m.get("Name2"),将(可为空的)结果放入Optional,然后使用映射:
boolean result = Optional.ofNullable(m.get("Name2"))
.map(l -> l.stream().anyMatch(s -> s.contains("@")))
.orElse(false);
Run Code Online (Sandbox Code Playgroud)
这最好像HashMap.getO(1)那样循环访问条目集,并且对O进行迭代是O(n)。
| 归档时间: |
|
| 查看次数: |
7101 次 |
| 最近记录: |