2017-04-22 29 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'。 –