2017-04-22 31 views
-1

它困擾我(出於性能原因),我不能在沒有首先創建流的情況下調用allMatch,anyMatch列表。所以我開始創建這樣的實用方法:allMatch,anyMatch在沒有創建流的列表上

public static <T> boolean anyMatch(List<T> list, Predicate<T> predicate) { 
    for (T element : list) { 
     if (predicate.test(element)) { 
      return true; 
     } 
    } 
    return false; 
} 

有沒有簡單的方法?

編輯我不只是擔心單個對象的成本。如果你看一下Stream.anyMatch的源碼,你會發現很多事情在這種簡單的情況下是不必要的。

+1

那麼,Java8以前的其他幾個庫已經解決了這些問題。 –

+0

嘗試使用「Stream」時會出現什麼樣的性能問題? –

+0

@JacobG。可能沒什麼嚴肅的,但它仍然困擾我。 Stream顯然在很簡單的情況下做了很多不需要的事情。 – lbalazscs

回答

0

你的新方法似乎是一個好主意。儘管如果您使用Decorator Pattern而不是實用程序方法來維護良好的面向對象設計會更好。

public class StreamList<T> { 
List<T> list; 
public StreamList(List list) { 
    this.list = list; 
} 
public boolean anyMatch(Predicate<T> predicate) { 
    for (T element : list) { 
     if (predicate.test(element)) { 
      return true; 
     } 
    } 
    return false; 
} 
} 
+0

這裏有很多語法錯誤。 –

+1

有趣的想法,+1!你明顯的意思是在這種情況下刪除「靜態」 – lbalazscs

+0

構造函數的參數應該是'List '類型,並且由於某種原因'StreamList#anyMatch'又定義了'T'。 –