2010-11-25 6 views
46

私はストリングのコレクションを持っていて、それをすべて空であるかヌルであるストリングのコレクションに変換したいと思います。ストリングは削除され、他のストリングはすべて切り取られます。Guava:フィルタと変換を結合する方法は?

私は2つのステップでそれを行うことができます。

final List<String> tokens = 
    Lists.newArrayList(" some ", null, "stuff\t", "", " \nhere"); 
final Collection<String> filtered = 
    Collections2.filter(
     Collections2.transform(tokens, new Function<String, String>(){ 

      // This is a substitute for StringUtils.stripToEmpty() 
      // why doesn't Guava have stuff like that? 
      @Override 
      public String apply(final String input){ 
       return input == null ? "" : input.trim(); 
      } 
     }), new Predicate<String>(){ 

      @Override 
      public boolean apply(final String input){ 
       return !Strings.isNullOrEmpty(input); 
      } 

     }); 
System.out.println(filtered); 
// Output, as desired: [some, stuff, here] 

しかし、1つのステップに二つの動作を組み合わせるグアバの方法は何ですか?

+0

を、それはそれを行うための最も簡単な方法についてです。よく使われるいくつかの関数が焼き付けられていないことに注意してください。なぜなら 'Strings' APIを要求して、静的な' Function'と 'Predicate'を追加してみましょう。私はメンテナをhttp://code.google.com/p/guava-libraries/issues/listで丁寧に対応してくれました。 – Carl

+0

@Carl私は既にパイプラインでhttp://code.google.com/p/guava-libraries/issues/list?can=2&q=reporter:sean,mostlymagic.comの問題を解決しなければなりません。彼らの神経に乗る。しかし私はちょうどそれをするかもしれません、なぜなら結局私はグアバを私のためにコモンズ/ラングとコモンズ/イオフに置き換えたいと思っています。 –

+2

私はあなたがフィルタリングし、変換できると思います。あなたの変換でnullの場合をテストする必要はありません。 –

答えて

77

次の最新バージョン(12.0)のGuavaには、FluentIterableという名前のクラスがあります。 このクラスは、このような種類の不足している流暢なAPIを提供します。 FluentIterableを使用して

は、あなたがこのような何かやってできるはずです:skaffmanノートとして

final Collection<String> filtered = FluentIterable 
    .from(tokens) 
    .transform(new Function<String, String>() { 
     @Override 
     public String apply(final String input) { 
     return input == null ? "" : input.trim(); 
     } 
    }) 
    .filter(new Predicate<String>() { 
     @Override 
     public boolean apply(final String input) { 
     return !Strings.isNullOrEmpty(input); 
     } 
    }) 
    .toImmutableList(); 
+1

Java 8を使用している場合、 'FluentIterable'の使用は推奨されません。 –

+0

非常に滑らかです。うれしい私はこれをつまずいた。 –

関連する問題