【发布时间】:2020-09-18 12:26:38
【问题描述】:
我有一个类可以检查一个键是否包含在一组键中。此条件在Map 中使用MathingTypes 进行了描述
public enum MatchingType {
MATCH, MISMATCH
}
匹配类型谓词的映射
Map<MatchingType, Function<Set<String>, Predicate<String>>> predicateMap =
Map.of(
MATCH, set -> set::contains,
MISMATCH, set -> not(set::contains)
);
使用示例
public boolean isKeyAvailable(String key, MatchingType matchingType, Set<String> keys) {
return predicateMap.get(matchingType)
.apply(keys)
.test(key);
}
现在我看到上面的代码可以使用BiFunction 进行重构。
Map<MatchingType, BiFunction<Set<String>, String, Boolean>> predicateMap =
Map.of(
MATCH, Set::contains,
MISMATCH, Set::contains //how to negate?
);
public boolean isKeyAvailable(String key, MatchingType matchingType, Set<String> keys) {
return predicateMap.get(matchingType)
.apply(keys, key);
}
但是怎么可能否定Set::contains呢?
【问题讨论】:
标签: java lambda java-8 functional-interface