2017-12-10 6 views
3

signedOnフィールドがnullのすべての転送をフィルタしたいと思う。最初のコードを実行すると、どちらがヌルで、どれが正しくないのかはっきりしていますが、正しくログされますが、ストリームフィルタを実行すると空のリストが返され、問題の原因を見つけることができませんそれは... signedOnは日付フィールドです。空のリストを返すJava 8ストリームフィルタ常に

これは動作し、エントリ天気をすべてをログに記録しますがnullであるかどうか:

for (Transfer transfer : route.getTransferCollection()) { 
     if (transfer.getSignedOn() == null) { 
      logInfo("This transfer is null"); 
     } else if (transfer.getSignedOn() != null) { 
      logInfo("This transfer is not null"); 
     } 
    } 

これは空のリストを返します:

return route.getTransferCollection() 
      .stream() 
      .filter(transfer -> transfer.getSignedOn() == null) 
      .collect(Collectors.toList()); 
} 
+0

'getTransferCollection()'の戻り値の型は何ですか? – Harald

+0

'filter'の中のログステートメントはどうですか? – Eugene

+0

@Haraldそれはコレクションです brightpants

答えて

2

あなたはfilter自体

return route.getTransferCollection() 
     .stream() 
     .filter(transfer -> { 
       boolean test = transfer.getSignedOn() == null; 
       if(test){ 
        // log wathever 
       } else { 
        // log diff 
       } 
       return test 
       }) 
     .collect(Collectors.toList()); 
の内側にあなたの文をログに記録することができます

peekを使用すると、ストリームbtwをログに記録できますが、あなたのケースでは、nullに対して2回テストする必要があります。

あなたはまた、別のコレクタは、(filterなし)nullであるものとそうでないものを取得するかもしれ使用することができます。route.getTransferCollection()はすでに空のリストであるかのように

.collect(Collectors.partitioningBy(transfer -> transfer.getSignedOn() == null)) 
+0

私はこのように正確に試しましたが、何もログに記録しません:/何が起こっているのか分かりませんので、私は日曜日であるので、nullのときに別のリストに追加するなど、帰りたいと思っています – brightpants

+2

@brightpantsは本当に変ですが、あなたの会社コードを見ずに何が起こっているのかを伝えるのは難しいです。あなたのコードは常に良いIMOです) – Eugene

+1

結果が空になる可能性は2つあります: 'route。getTransferCollection() 'が既に空であるか、すべての転送にsignedOnDateがあります(フィルターは削除する要素ではなく、保持する要素を定義します)。ストリームの前に 'route.getTransferCollection()'のサイズを記録して、空であるかどうかを調べることができます。 –

2

に思えます。次のように確認してください:

route.getTransferCollection() 
    .stream() 
    .forEach(System.out::println); // or .forEach(e -> logInfo(e)); 

これが何かを印刷するかどうかを確認してください。

+8

この例では、何も印刷されません。ストリームに端末操作がありません。 –

+0

私の悪い、 'peek'を' forEach'に変更しました。ありがとう、@ブライアンゲーツ! – PresentProgrammer

関連する問題