gpt4 book ai didi

java - 从流中获取唯一对象(如果存在)

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

从一个 bean 类开始 MyBean具有单个相关属性:

@Data
class MyBean {
private String myProperty;
}

现在我有一套这样的 bean Set<MyBean> mySet通常有 0、1 或 2 个元素。

问题是:如何检索 myProperty如果所有元素都相等,则从该集合中获取,否则为 null。最好在单行中,工作量为 O(n)。

我找到了几个例子来确定 boolean 值是否所有属性都相等。但是我想知道相应的属性。

还有比这更聪明的东西吗?

String uniqueProperty = mySet.stream().map(MyBean::getMyProperty).distinct().count() == 1 
? mySet.stream().map(MyBean::getMyProperty).findAny().orElse(null)
: null;

最佳答案

您的版本已经是 O(n)

可以用一行代码来做到这一点(尽管你的也取决于你如何写它)。

String uniqueProperty = mySet.stream()
.map(MyBean::getMyProperty)
.map(Optional::ofNullable)
.reduce((a, b) -> a.equals(b) ? a : Optional.empty()) // Note: equals compares 2 Optionals here
.get() // unwraps first Optional layer
.orElse(null); // unwraps second layer

唯一不起作用的情况是所有属性值为 null。您无法区分集合 (null, null)(null, "A"),例如,它们都返回 null

关于java - 从流中获取唯一对象(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56259674/

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