2017-02-28 88 views
1

下面的代碼在java 6中。如何使用流和功能性功能在java 8中編寫代碼?我需要使用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()List使用streams,然後用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

好用'或'方法來自'謂詞' –