2016-06-29 6 views
1

リストマッチングの等価性で1番目の要素を探したいと思います。 :RxJava述語フィルタ

1は、そのサブタイプに

class EditorialBlock extends Block 

2フィルタ素子

3リターンリターンヌルを発見していないそうでない場合は最初の要素をキャスト。

通常、私は、これはRxJavaで書かれたことができますどのように

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; 
} 

としてそれを書くのだろうか? 0反復、1つの鋳造、2フィルター、3リターン最初の要素はnull

注: あなたはまた、4つのステップを分解することができます私は、グアバの述語のファンでした。私のAndroidアプリでデックス数を減らすために、可能ならば、RxJavaをGuavaのPredicatesに置き換えます。

答えて

1

これは、仕事私はキャストを行います)は、Java 8

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(ヌル)があなたの第三のポイントですし。

コードの反復が深くなります。