Cht*_*ect 5 java predicate java-8 java-stream
我正在改变我的一些旧代码以利用Java 8的功能方面.特别是,我正在使用Guava谓词java.util.function.Predicate
.其中一个谓词是检查a是否Stream
是同质的,即由所有相同的元素组成.
在我的旧代码中(使用Guava Predicate
),我有这个:
static <T> Predicate<Iterable<T>> isHomogeneous() {
return new Predicate<Iterable<T>>() {
public boolean apply(Iterable<T> iterable) {
return Sets.newHashSet(iterable).size() == 1;
}
};
}
Run Code Online (Sandbox Code Playgroud)
这是新版本,使用java.util.function.Predicate
:
public static Predicate<Stream<?>> isHomogeneous =
stream -> stream.collect(Collectors.toSet()).size() == 1;
Run Code Online (Sandbox Code Playgroud)
IDE(IntellijIDEA v.12)没有显示任何红色波浪线表示错误,但是当我尝试编译时,我得到了这个:
java: no suitable method found for
collect(java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.Set<java.lang.Object>>)
method java.util.stream.Stream.<R>collect(java.util.function.Supplier<R>,java.util.function.BiConsumer<R,? super capture#2 of ?>,java.util.function.BiConsumer<R,R>) is not applicable
(cannot infer type-variable(s) R
(actual and formal argument lists differ in length))
method java.util.stream.Stream.<R,A>collect(java.util.stream.Collector<? super capture#2 of ?,A,R>) is not applicable
(cannot infer type-variable(s) R,A,capture#3 of ?,T
(argument mismatch; java.util.stream.Collector<capture#2 of ?,capture#4 of ?,java.util.Set<capture#2 of ?>> cannot be converted to java.util.stream.Collector<? super capture#2 of ?,capture#4 of ?,java.util.Set<capture#2 of ?>>))
Run Code Online (Sandbox Code Playgroud)
注意:我认为在流上有一个谓词可能不是一个好主意.事实上,在我的代码库中,我只需要它List<>
.但我仍然对简单的单行isHomogeneous
谓词有什么问题感到好奇.
aio*_*obe 13
另一种选择是使用Stream.distinct
并确保在结果流中只获得1个元素.
stream.distinct().limit(2).count() == 1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1236 次 |
最近记录: |