gpt4 book ai didi

Java 8 Streams : simplifying o1 -> Objects. equals(o1.getSome().getSomeOther(), o2.getSome().getSomeOther()) 在流中

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:28 25 4
gpt4 key购买 nike

给定以下代码:

stream.filter(o1 -> Objects.equals(o1.getSome().getSomeOther(),
o2.getSome().getSomeOther())

这怎么可能被简化?

是否有一些equals-实用程序可以让您首先提取一个 key ,就像Comparator.comparing一样哪个接受 key 提取器函数?

请注意,代码本身 (getSome().getSomeOther()) 实际上是从模式生成的。

最佳答案

编辑:(在与同事讨论并重新访问后:Is there a convenience method to create a Predicate that tests if a field equals a given value?)

我们现在得到以下可重用的功能接口(interface):

@FunctionalInterface
public interface Property<T, P> {

P extract(T object);

default Predicate<T> like(T example) {
Predicate<P> equality = Predicate.isEqual(extract(example));
return (value) -> equality.test(extract(value));
}
}

和下面的静态便捷方法:

static <T, P> Property<T, P> property(Property<T, P> property) {
return property;
}

过滤现在看起来像:

stream.filter(property(t -> t.getSome().getSomeOther()).like(o2))

与之前的解决方案相比,我喜欢这个解决方案的地方:它清楚地将属性的提取和 Predicate 本身的创建分开,并且更清楚地说明了正在发生的事情。

以前的解决方案:

<T, U> Predicate<T> isEqual(T other, Function<T, U> keyExtractFunction) {
U otherKey = keyExtractFunction.apply(other);
return t -> Objects.equals(keyExtractFunction.apply(t), otherKey);
}

这导致以下用法:

stream.filter(isEqual(o2, t -> t.getSome().getSomeOther())

但如果有人有更好的解决方案,我会更高兴。

关于Java 8 Streams : simplifying o1 -> Objects. equals(o1.getSome().getSomeOther(), o2.getSome().getSomeOther()) 在流中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43661288/

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