RxJava 谓词过滤器
RxJava Predicate Filter
我想在匹配相等的列表中找到第一个元素。 :
1 转换为其子类型
class EditorialBlock extends Block
2 筛选元素
3 return 第一个元素否则如果没有找到 return null.
一般我会写成
EditorialBlock findBlockByID(final List<Block> contentBlocks, final String identifier) {
for (Block block : contentBlocks) {
EditorialBlock item = (EditorialBlock) block; // 1 casting
if (identifier.equals(item.getIdentifier())) { // 2 filter
return item; // 3 return the first element
}
}
return null;
}
这个怎么用RxJava写的?
您还可以分解 4 个步骤吗:0 迭代,1 转换,2 过滤器,3 Return 第一个元素或 null
注意:我是 Guava 谓词的粉丝。为了降低我的 Android 应用程序中的 dex 计数,如果可能的话,我将用 Guava 的 Predicates 替换 RxJava。
这应该可以,请注意,我使用了一个需要 Java 8.
的 lambda 表达式
EditorialBlock findBlockByID(final List<Block> contentBlocks, final String identifier) {
return Observable.from(contentBlocks)
.cast(EditorialBlock.class)
.filter(x -> x.getIdentifier().equals(identifier))
.toBlocking()
.firstOrDefault(null);
}
.cast() 执行转换。
.filter() 进行过滤
.firstOrDefault(null) 是您的第三点。
迭代发生在代码的更深处。
我想在匹配相等的列表中找到第一个元素。 :
1 转换为其子类型
class EditorialBlock extends Block
2 筛选元素
3 return 第一个元素否则如果没有找到 return null.
一般我会写成
EditorialBlock findBlockByID(final List<Block> contentBlocks, final String identifier) {
for (Block block : contentBlocks) {
EditorialBlock item = (EditorialBlock) block; // 1 casting
if (identifier.equals(item.getIdentifier())) { // 2 filter
return item; // 3 return the first element
}
}
return null;
}
这个怎么用RxJava写的? 您还可以分解 4 个步骤吗:0 迭代,1 转换,2 过滤器,3 Return 第一个元素或 null
注意:我是 Guava 谓词的粉丝。为了降低我的 Android 应用程序中的 dex 计数,如果可能的话,我将用 Guava 的 Predicates 替换 RxJava。
这应该可以,请注意,我使用了一个需要 Java 8.
的 lambda 表达式EditorialBlock findBlockByID(final List<Block> contentBlocks, final String identifier) {
return Observable.from(contentBlocks)
.cast(EditorialBlock.class)
.filter(x -> x.getIdentifier().equals(identifier))
.toBlocking()
.firstOrDefault(null);
}
.cast() 执行转换。
.filter() 进行过滤
.firstOrDefault(null) 是您的第三点。
迭代发生在代码的更深处。