allMatch,noMatch on lists而不创建流

时间:2017-04-22 20:41:09

标签: java java-8

由于性能原因,我不能在没有首先创建流的情况下在列表上调用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 个答案:

答案 0 :(得分: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;
 }
}