从一个 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/