我不相信这个问题特定于这些Java 8类的Bi
版本,因此问题标题中的问题。
我创建了一个函数来创建一个具有以下要求的Apache Commons Lang3 Pair
对象:
我在以下方法中做到了这一点:
BiPredicate<String,String> valuesExist = (pre, post) -> pre != null || post != null;
final BiPredicate<String, String> valuesDiffer = valuesExist.and((pre, post) ->
(pre != null) ? ! pre.equals(post) : true);
BiFunction<String, String, Pair<String,String>> createPair =
(pre, post) -> (valuesDiffer.test(pre, post)) ?
ImmutablePair.of(pre, post) : null;
// usage looks like:
Pair<String, String> myPair = createPair.apply(myValue1, myValue2)
我有3个问题:
final
更新
根据以下答案之一,没有任何Java-8功能的解决方案似乎也很实用:
static boolean filterPairArgs(String pre, String post) {
return (pre != null || post != null) && ((pre == null) || !pre.equals(post));
}
static Pair<String, String> createPair(String v1, String v2) {
if (filterPairArgs(v1, v2)) {
return new Pair<>(v1, v2);
}
return null;
}
// usage looks like:
Pair<String, String> myPair = createPair(myValue1, myValue2);
答案 0 :(得分:3)
Objects.equals()方法的空安全处理将在这里清理。
就个人而言,我把它放在辅助函数中。您可以在功能上将其用作整洁的方法参考,或者只是将其称为方法。
static Pair<String, String> toPair(String pre, String post) {
return Objects.equals(pre, post) ? null : ImmutablePair.of(pre, post);
}
答案 1 :(得分:0)
您可以加入谓词:
BiPredicate<String,String> valuesExist = (pre, post) -> (pre != null || post != null) && ((pre == null) || !pre.equals(post));
BiFunction<String, String, Pair<String,String>> createPair =
(pre, post) -> (valuesExist.test(pre, post)) ?
new Pair<>(pre, post) : null;
我个人会改为创建2个方法/函数:
boolean filterPairArgs(String pre, String post) {
return (pre != null || post != null) && ((pre == null) || !pre.equals(post));
}
Pair<String, String> createPair(String v1, String v2, BiPredicate<String, String> pred) {
if(pred.test(v1, v2)) {
return new Pair<>(v1, v2);
}
return null;
}
// usage looks like:
Pair<String, String> myPair = createPair(myValue1, myValue2, this::filterPairArgs);