2017-07-06 10 views
0

私の問題は、コレクションにnull値があり、すべての "utils"メソッドがコレクションが空ではないということです。その他の「エレガントな」オプションはありますか?null要素を含むヌルコレクションを内部で確認する

このコードは、nullポインタ例外がスローされます。

public static void main(String[] args) { 
    ArrayList<String> strings = new ArrayList<>(); 
    strings.add(null); 

    if(CollectionUtils.isNotEmpty(strings)) { 
     for (String s : strings) { 
      System.out.println(s.length()); 
     } 
    } 
} 
+0

は、スタックオーバーフローへようこそ!デバッグの助けを求める質問( "なぜこのコードは動作しないのですか?")には、目的の動作、_a特定の問題またはerror_を含める必要があります。明確な問題文がない質問は、他の読者にとって有用ではありません。参照:[最小限で完全で検証可能なサンプルの作成方法](http://stackoverflow.com/help/mcve) –

+4

nullを含むコレクションは空ではありません。コレクションにnullが含まれている場合は、そのコレクションを反復処理するときにそのコレクションをチェックする必要があります。 (ただし、コレクションにnullを含めることが不可能になったほうが良い99%の時間) –

+0

これはhttps://stackoverflow.com/questions/34305512/what-is-difference-の複製ではありません。 between-null-and-empty-list - ここでのOPは、 "リストにnullが含まれているかどうかを検出するためのutilメソッドがありますか?" –

答えて

1

あなたはヌルがコレクション内にあるかどうかを確認および/または次のコードのようにフィルタリングすることができます:

public static void main(String[] args) { 
    List<String> strings = new ArrayList<>(); 
    strings.add("one"); 
    strings.add(null); 
    strings.add("two"); 

    // has a null value? 
    final boolean hasNulls = strings.stream() 
      .anyMatch(Objects::isNull); 
    System.out.println("has nulls: " + hasNulls); 

    // filter null values 
    strings = strings.stream() 
      .filter(Objects::nonNull) 
      .collect(Collectors.toList()); 

    System.out.println("filtered: " + strings.toString()); 
} 
+0

OPはヌルチェックの方法を知らず、ストリーム処理を表示していますか? –

+0

@AbhijitSarkar:彼はヌルを含むかもしれないコレクションをチェックしたり処理したりするために_elegantオプション_を求めていました。もちろん、forループを守り、追加の 'if(s!= null)'を追加することができます。 –

+0

彼は引用符で "エレガント"を持っていました。 –

関連する問題