2016-11-15 7 views
3

空の文字列をList of Stringsから削除したいと思います。ここでJava 8 - 空の文字列をリストからフィルタリングすることができません

は、ストリームAPI使用して、私が試したものです:

list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList()); 

を、空の文字列がまだリストに存在します。私は何が欠けていますか?

+0

は、それは '文字列:: isEmpty'ではないでしょうか? – Tschallacka

+0

返された値をある変数に代入していますか? – ItamarG3

+3

*空ではないアイテムは保管しないでください。あなたは空のものだけを残しています。 –

答えて

11

filter()述語に一致する要素を保持します。

list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList()); 

これも元のリストを変更しません。元のリストのフィルターを適用したコピーが作成されます。だから、あなたは元のリストを変更したい場合、あなたはあなたがリストから空の文字列を削除していない

list.removeIf(item -> item.isEmpty()); 

または単に

list.removeIf(String::isEmpty); 
+0

私は逃しました!質問に。私の問題は、私が結果を保持していないということでした。私はそのフィルタ()が元のリストを変更しますが。 – stackUnderflow

0

空でない文字列を削除しています(フィルタ条件を確認してください)。試してみてください:

list.stream().filter(item -> !item.isEmpty()).collect(Collectors.toList()); 

をそうしないと、あなたにも空白を削除していることを確認する必要がある場合があります

list.stream().filter(item -> !item.trim().isEmpty()).collect(Collectors.toList()); 
2

たぶん文字列は空白が含まれていますか? item -> item.isEmpty()item -> !item.trim().isEmpty()に置き換えてください。

2

あなたは結果を保持していないと思われます。結果は返されますが、元のリストは関数型プログラミングスタイルであるため変更されません。

list = list.stream().filter(item-> !item.trim().isEmpty()).collect(Collectors.toList()); 
0

を使用する必要があります

list = list.stream().filter(item-> !item.isEmpty()).collect(Collectors.toList()); 

を必要とする、あなたがましたそれらを検索する。フィルタ条件が間違っています。

このようにしてみてください。

List<String> collect = list.stream().filter(item -> !item.trim().isEmpty()).collect(Collectors.toList()); 
1

を使用すると、空の要素:)

を収集しているあなたはとても述語さらに

List<String> xxx = list.stream().filter(item -> !item.isEmpty()).collect(Collectors.toList()); 

を反転空ではないが欲しい、ストリームが変更されていません元のリストなので、 Collect(Collectrors.toList())は述語の結果を返しています:)

+0

彼は空の要素を集めて、それらについて忘れています:) – TheLostMind

+1

ああ本当にも:)良い目! –

+0

tnxs @TheLostMind –

0

あなたは例の下に従うことができ、それはあなたに役立つかもしれない

String[] firstArray = {"test1", "", "test2", "test4", "", null}; 

    firstArray = Arrays.stream(firstArray).filter(s -> (s != null && s.length() > 0)).toArray(String[]::new); 
0
 <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.5-SNAPSHOT</version> 
     </dependency> 

import org.apache.commons.lang3.StringUtils; 
     //Java8 new api 
     strings.removeIf(StringUtils::isBlank); 
     //stream  strings=strings.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList()); 
関連する問題