2017-01-30 1 views
9

私はGuavaからJava 8 Streamsに移行しようとしていますが、iterablesの処理方法を理解することはできません。ここに私のコードは、反復可能で、空の文字列を削除するには、次のとおりです。Iterables.filter()をStreamsに置き換えるにはどうすればいいですか?

Iterable<String> list = Iterables.filter(
    raw, // it's Iterable<String> 
    new Predicate<String>() { 
    @Override 
    public boolean apply(String text) { 
     return !text.isEmpty(); 
    } 
    } 
); 

注意を払う、それがIterable、ないCollectionです。それは、潜在的に無制限のアイテムの量を含む可能性があります、私はすべてをメモリに読み込むことはできません。私のJava 8の代替案は何ですか?

ところで、ラムダでこのコードはさらに短くなります

Iterable<String> list = Iterables.filter(
    raw, item -> !item.isEmpty() 
); 
+0

'raw'は何種類? – shmosel

+0

どのバージョンのGuavaをお使いですか?または、Guavaをまったく使用したくないですか? – shmosel

+0

@shmosel私はGuavaを取り除き、Java 8 Streamsに移行したいと思っています。多分それはないでしょう。それがここで尋ねる理由です。 – yegor256

答えて

8

をあなたはStream.iterator()を使用して、機能のインターフェースとしてIterableを実装できます。

Iterable<String> list =() -> StreamSupport.stream(raw.spliterator(), false) 
     .filter(text -> !text.isEmpty()) 
     .iterator(); 
+0

'iterator()'は 'Iterator'のインスタンスを返します。' Iterable'は返しません。 – yegor256

+1

@ yegor256もっと慎重に読んでください。または試してみてください。 – shmosel

+1

それを持って、私の悪い。ありがとう! – yegor256

関連する問題