我完全理解这种形式:
<Style.Triggers>
<DataTrigger Binding="{Binding YourBinaryOption}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding YourBinaryOption}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
但是这个临时实例真让我困惑:
Set<T> set = new HashSet<>();
list.stream().allMatch(t -> set.add(t));
// And that
list.stream().allMatch(set::add);
最有趣的是hashset只实例化了一次。
成立于this topic
答案 0 :(得分:4)
它与第一个表达式相同,只是您没有在上下文中保留对新创建的集的引用。如果在allMatch
调用之后你不需要set的值,它就是一样的。它本质上是一个方法引用表达式,其中包含新创建的HashSet
实例。虽然初看起来可能会令人困惑,但HashSet
只创建一次,然后方法引用绑定到这个新创建的实例,并在评估allMatch
操作时使用。
虽然它可能是一个可行的解决方案,但它可能很危险,尤其是对于非顺序(并行)流管道,因为它违反了API合同中allMatch
谓词的statelessness要求。