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;
}
}
}
}
一致するName2
が含まれている場合、@
のブール結果を取得するにはどうすればよいですか?
次のコードを使用してみましたが、特定のキーにITを使用する方法がわかりません
result = m.values().stream().anyMatch(v -> v.contains("@"))
単純にm.get("Name2")
を使用し、(null可能)結果をOptional
に配置してから、マッピングを使用できます。
boolean result = Optional.ofNullable(m.get("Name2"))
.map(l -> l.stream().anyMatch(s -> s.contains("@")))
.orElse(false);
HashMap.get
はO(1))であり、エントリセットの繰り返し処理はO(n)であるため、これはエントリセットのループ処理よりも望ましい方法です。
以下をせよ:
_boolean result = m.getOrDefault("Name2", Collections.emptyList()).stream()
.anyMatch(i -> i.contains("@"));
_
Map
に正しいキーが含まれている場合は、値としてのList
の要素に特定の文字が含まれているかどうかを確認します。 Map
にキーが含まれていない場合は、何も含まれていない空のCollection
をモックすると、結果は自動的にfalse
として評価されます。
編集:@Michaelが示唆したように、Collections.emptyList()
よりも new ArrayList<>()
を使用することをお勧めします。
どうですか
String name = "Name1";
boolean result= m.containsKey(name) && m.get(name).stream().anyMatch(a -> a.contains("@"));
これを試して:
boolean result = m.entrySet().stream()
.filter(e -> e.getKey().equals(Name2))
.map(Map.Entry::getValue)
.flatMap(List::stream)
.anyMatch(s -> s.contains("@"));
entrySet()
からストリームを作成し、anyMatch
に基準を指定します。
result = m.entrySet()
.stream()
.anyMatch(v -> Objects.equals("Name2", v.getKey()) &&
v.getValue().stream().anyMatch(s -> s.contains("@")));
またはgetOrDefault
を使用:
result = m.getOrDefault("Name2", Collections.emptyList())
.stream()
.anyMatch(s -> s.contains("@"));
正しいフィルター条件を追加するだけです:
m.entrySet()
.stream()
.anyMatch(entry-> entry.getKey().equals(Name2) &&
entry.getValue()
.stream()
.anyMatch(string -> string.contains("@"))
.getValue();
最初に、必要なキーでフィルタリングする必要があります。次に、anyMatch
を使用して、そのキーの値に「@」文字のある要素が含まれているかどうかを判断できます。
result = m.entrySet ()
.stream ()
.filter (e->e.getKey ().equals (Name2))
.anyMatch (e->e.getValue ().stream ().anyMatch (s->s.contains ("@")));
これはどうですか
Map<Integer, String> result = hmap.entrySet()
.stream()
.filter(map -> map.getKey().equals("Name2"))
.collect(Collectors.toMap(map -> map.getKey(), map -> map.getValue()))
.orElse(null);
これは、NoSuchElementExceptionも処理します。