我想找到匹配相等的List中的第一个元素。 :
1投射到其子类型
class EditorialBlock extends Block
2过滤元素
3返回第一个元素,否则如果没有找到则返回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个返回第一个元素或者空白
注意:我是番石榴的谓词粉丝。为了降低我的Android应用中的dex数量,如果可能的话,我将用Guava的Predicates替换RxJava。
答案 0 :(得分:1)
这应该有效,请注意我使用了一个需要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)是你的第三点。
迭代在代码中发生得更深。