2017-02-28 3 views
1

以下のコードはjava 6にあります。私は効率的な方法でカスタムオブジェクトのリストをフィルタリングするためにJava 8フィルタを使用する必要があります

List<FileTransAuditInfo> workRequestFileTransAuditListforSubmission = new ArrayList<FileTransAuditInfo>(); 

for(FileTransAuditInfo fileTransAuditInfo : workRequestFileTransAuditList) { 
    if (fileTransAuditInfo.getFileEventType().equalsIgnoreCase(type1) || 
     fileTransAuditInfo.getFileEventType().equalsIgnoreCase(type2)) { 
      workRequestFileTransAuditListforSubmission.add(fileTransAuditInfo); 
    } 
} 

return workRequestFileTransAuditListforSubmission; 
+0

だから何が問題だと思われますか? –

答えて

2

のJava 8でコードの同等は次のようになります。ここ

public static void main(String[] args) { 

    List<FileTransAuditInfo> workRequestFileTransAuditList = new ArrayList<>(); 

    final String type1 = "type 1"; 
    final String type2 = "type 2"; 

    List<FileTransAuditInfo> workRequestFileTransAuditListforSubmission = workRequestFileTransAuditList.stream() 
      .filter(file -> file.getFileEventType().equalsIgnoreCase(type1) || file.getFileEventType().equalsIgnoreCase(type2)) 
      .collect(Collectors.toList()); 

} 

チェックがどのようにして、Javaの8

+0

これは完璧に働いています。助けてくれてありがとう。 –

3

まず.stream()Liststreamsを使用使用するStream#filter、最終的にcollect新しいListに変更してください。

フィルタテストの繰り返し回数を減らすには、ヘルパー関数を使用します。

Function<String,Predicate<FileTransAuditInfo>> eventTypeIs = 
    type -> file -> file.getFileEventType().equalsIgnoreCase(type); 

return workRequestFileTransAuditList 
    .stream() 
    .filter(eventTypeIs.apply(type1).or(eventTypeIs.apply(type2))) 
    .collect(Collectors.toList()); 
+3

'Predicate 'の 'or'メソッドをうまく使う –

関連する問題