gpt4 book ai didi

Java 8,如何从 (Bi)Predicate 组合 (Bi)Function

转载 作者:行者123 更新时间:2023-11-29 04:26:50 29 4
gpt4 key购买 nike

我不认为这个问题是针对这些 Java 8 类的 Bi 版本的,因此问题标题中有括号。

我编写了一个函数来创建具有以下要求的 Apache Commons Lang3 Pair 对象:

  1. 如果 Left 和 Right 都为 null,则 Pair 应该为 null
  2. 如果 Left 和 Right 彼此相等,则 Pair 应该为空
  3. 否则,应创建一个 Pair,其中任何一方都可以为 null

我是在一个方法中完成的,如下所示:

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 个问题:

  1. 有没有办法避免 2 个 BiPredicates?第二个是必需的,因为在 BiFunction 内部引用需要它是 final
  2. 有没有办法将它从方法中移出并移到周围的类中?
  3. 我错过了明显的“清理”吗?

更新

根据以下答案之一,没有任何 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);

最佳答案

Objects.equals() 的空安全处理方法将清理这里的东西。

就我个人而言,我会把它放在辅助函数中。您可以在功能上将其用作整洁的方法引用,或简单地将其作为方法调用。

static Pair<String, String> toPair(String pre, String post) {
return Objects.equals(pre, post) ? null : ImmutablePair.of(pre, post);
}

关于Java 8,如何从 (Bi)Predicate 组合 (Bi)Function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45846273/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com