Guavaを使用してコレクションを変換するときにnullを削除するエレガントな方法はありますか?

Jonik:

Googleコレクションを使用するときに、いくつかのコレクション処理コードの簡略化について質問があります(updateGuava)。

「コンピュータ」オブジェクトがたくさんありますが、それらの「リソースID」のコレクションを取得したいと思います。これは次のように行われます:

Collection<Computer> matchingComputers = findComputers();
Collection<String> resourceIds = 
    Lists.newArrayList(Iterables.transform(matchingComputers, new Function<Computer, String>() {
    public String apply(Computer from) {
        return from.getResourceId();
    }
}));

現在、getResourceId()nullを返す場合があります(現在のところオプションを変更することはできません)が、この場合、結果のStringコレクションからnullを省略したいと思います。

nullを除外する1つの方法を次に示します。

Collections2.filter(resourceIds, new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        return input != null;
    }
});

これらすべてを次のようにまとめることができます。

Collection<String> resourceIds = Collections2.filter(
Lists.newArrayList(Iterables.transform(matchingComputers, new Function<Computer, String>() {
    public String apply(Computer from) {
        return from.getResourceId();
    }
})), new Predicate<String>() {
    @Override
    public boolean apply(String input) {
        return input != null;
    }
});

しかし、これはとてもエレガントで、読みやすいことは言うまでもありません。実際、(空想的なPredicateやFunctionのものがまったくない)プレーンな古いJavaコードは間違いなくはるかにクリーンです。

Collection<String> resourceIds = Lists.newArrayList();
for (Computer computer : matchingComputers) {
    String resourceId = computer.getResourceId();
    if (resourceId != null) {
        resourceIds.add(resourceId);
    }
}

上記を使用することも選択肢の1つですが、好奇心から(そしてGoogleコレクションについてもっと学びたいと考えています)、Googleコレクションを使用して、より簡潔でエレガントな方法でまったく同じことを実行できますか?

Cowan:

Predicatesここに役立つ述語がすでにPredicates.notNull()あります--これを使用Iterables.filter()して、これをもう少しクリーンアップすることがLists.newArrayList()できるという事実がIterableあります。

Collection<String> resourceIds = Lists.newArrayList(
  Iterables.filter(
     Iterables.transform(matchingComputers, yourFunction),
     Predicates.notNull()
  )
);

実際にを必要としない場合はCollection、だけを使用するIterableと、Lists.newArrayList()呼び出しもなくなるため再び1ステップクリーンになります。

私はあなたががFunction再び便利になると思うかもしれないと思うかもしれません、そして

public class Computer {
    // ...
    public static Function<Computer, String> TO_ID = ...;
}

これによりさらにクリーンアップされます(再利用が促進されます)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Kotlinと矢印でリストをNonEmptyListに変換するエレガントな方法はありますか?

分類Dev

コンセントをアクションに変換するクリーンな方法はありますか?

分類Dev

継承(抽象クラスを使用)を使用して、カスタムフレームワーク内のメソッドのサブセクションをサブクラスに提供するよりエレガントな方法はありますか?

分類Dev

オプションを使用してnull許容フィールドの値を初期化して返すエレガントな方法はありますか

分類Dev

nhibernateを使用するときに(不要な追加と削除を作成せずに)子コレクションを更新する最もエレガントな方法は何ですか?

分類Dev

プロパティを置き換える前に削除すると、ガベージコレクションの優先度が変わりますか?

分類Dev

このコードよりもJavaでXMLドキュメントを文字列に変換するよりエレガントな方法はありますか?

分類Dev

オブジェクトのコレクションを反復処理するときにng-controllerを動的に割り当てる方法はありますか?

分類Dev

Java Guavaを使用してコレクションに関数を適用することは可能ですか?

分類Dev

実際の値を割り当てたばかりのnull許容フィールドはもうnullにできないことをコンパイラに納得させる、エレガントなkotlinの方法はありますか?

分類Dev

Graph APIを使用してカレンダーイベントをクエリするときに使用できるオプションとプロパティを知る方法はありますか?

分類Dev

Java:オブジェクトのコレクションがあるときに平均を取得する簡単な方法はありますか?

分類Dev

よりエレガントな方法で1つのコンポーネントに対して複数のアクションを実行できますか?

分類Dev

ffmpegを使用してファイルをチャプターごとに分割するエレガントな方法はありますか?

分類Dev

nilをチェックし、同時に変数に割り当てるエレガントな方法はありますか?

分類Dev

Javaでオブジェクトをnullに割り当てると、ガベージコレクションに影響がありますか?

分類Dev

コレクション全体をフェッチせずに、@ OneToMany関係(JoinTableを使用)の子エンティティを削除する方法はありますか?

分類Dev

Integerオブジェクトのコレクションを取得してこれらの要素を追加するこの反復関数を再帰的な関数に変換する方法はありますか?

分類Dev

JAXBを使用してコレクションのdefaultValueを指定する方法はありますか?

分類Dev

JAXBを使用してコレクションのdefaultValueを指定する方法はありますか?

分類Dev

freemarkerで変数をチェックするよりエレガントな方法はありますか?

分類Dev

ISO 639-2(3文字)言語コードをJavaロケールに変換するエレガントな方法はありますか?

分類Dev

Streambuilder /ウィジェットを使用せずに、Firestorageを使用してコレクションをマップのリストに変換する方法はありますか?

分類Dev

コレクションからリクエストを引き出す方法はどこにありますか?

分類Dev

Javaコレクションを反復してサブセットを取得する必要がありますか、それとも最初に配列に変換してから取得して取得する必要がありますか?

分類Dev

Guava Range値をキーとして使用するコレクションを並べ替える方法は?

分類Dev

ショートコードを介してワードプレスで数字を単語に変換する簡単な方法はありますか?

分類Dev

JSを使用してCSSキーフレームアニメーションをトリガーする実行可能な方法はありますか?

分類Dev

コードを読みやすくするためにJavaブール値の名前を変更するエレガントな方法はありますか?

Related 関連記事

  1. 1

    Kotlinと矢印でリストをNonEmptyListに変換するエレガントな方法はありますか?

  2. 2

    コンセントをアクションに変換するクリーンな方法はありますか?

  3. 3

    継承(抽象クラスを使用)を使用して、カスタムフレームワーク内のメソッドのサブセクションをサブクラスに提供するよりエレガントな方法はありますか?

  4. 4

    オプションを使用してnull許容フィールドの値を初期化して返すエレガントな方法はありますか

  5. 5

    nhibernateを使用するときに(不要な追加と削除を作成せずに)子コレクションを更新する最もエレガントな方法は何ですか?

  6. 6

    プロパティを置き換える前に削除すると、ガベージコレクションの優先度が変わりますか?

  7. 7

    このコードよりもJavaでXMLドキュメントを文字列に変換するよりエレガントな方法はありますか?

  8. 8

    オブジェクトのコレクションを反復処理するときにng-controllerを動的に割り当てる方法はありますか?

  9. 9

    Java Guavaを使用してコレクションに関数を適用することは可能ですか?

  10. 10

    実際の値を割り当てたばかりのnull許容フィールドはもうnullにできないことをコンパイラに納得させる、エレガントなkotlinの方法はありますか?

  11. 11

    Graph APIを使用してカレンダーイベントをクエリするときに使用できるオプションとプロパティを知る方法はありますか?

  12. 12

    Java:オブジェクトのコレクションがあるときに平均を取得する簡単な方法はありますか?

  13. 13

    よりエレガントな方法で1つのコンポーネントに対して複数のアクションを実行できますか?

  14. 14

    ffmpegを使用してファイルをチャプターごとに分割するエレガントな方法はありますか?

  15. 15

    nilをチェックし、同時に変数に割り当てるエレガントな方法はありますか?

  16. 16

    Javaでオブジェクトをnullに割り当てると、ガベージコレクションに影響がありますか?

  17. 17

    コレクション全体をフェッチせずに、@ OneToMany関係(JoinTableを使用)の子エンティティを削除する方法はありますか?

  18. 18

    Integerオブジェクトのコレクションを取得してこれらの要素を追加するこの反復関数を再帰的な関数に変換する方法はありますか?

  19. 19

    JAXBを使用してコレクションのdefaultValueを指定する方法はありますか?

  20. 20

    JAXBを使用してコレクションのdefaultValueを指定する方法はありますか?

  21. 21

    freemarkerで変数をチェックするよりエレガントな方法はありますか?

  22. 22

    ISO 639-2(3文字)言語コードをJavaロケールに変換するエレガントな方法はありますか?

  23. 23

    Streambuilder /ウィジェットを使用せずに、Firestorageを使用してコレクションをマップのリストに変換する方法はありますか?

  24. 24

    コレクションからリクエストを引き出す方法はどこにありますか?

  25. 25

    Javaコレクションを反復してサブセットを取得する必要がありますか、それとも最初に配列に変換してから取得して取得する必要がありますか?

  26. 26

    Guava Range値をキーとして使用するコレクションを並べ替える方法は?

  27. 27

    ショートコードを介してワードプレスで数字を単語に変換する簡単な方法はありますか?

  28. 28

    JSを使用してCSSキーフレームアニメーションをトリガーする実行可能な方法はありますか?

  29. 29

    コードを読みやすくするためにJavaブール値の名前を変更するエレガントな方法はありますか?

ホットタグ

アーカイブ