如何在 Java 8 中使用收集器简化这些嵌套 for 循环?

How can I simplify these nested for loops with collectors in Java 8?

我对 Java 中的收集器和并行流的想法很陌生,想知道是否有简化此代码的方法:

boolean foundAnyMatch = false;
for (MyObject myObject : hashSetOfObjects) {
    for (int i = 0; i < arrayOfStrings.length; i++) {
        if (myObject.customMethodReturnsBool(arrayOfStrings[i])) {
            foundAnyMatch = true;
            break;
        }
    }
}

如您所料,hashSetOfObjects 属于 Set<MyObject> 类型,其中 class MyObject 包含签名为 boolean customMethodReturnsBool(String entry) 的方法。此外,arrayOfStrings 只是 String[].

类型

据我了解,您的代码在 hashSetOfObjects 上运行了 O(n) 次。虽然您的目的是查找 hashSetOfObjects 中的任何对象是否真正导致嵌套代码。 可以使用流表示相同的逻辑:

boolean foundAnyMatch = hashSetOfObjects.stream
                           .anyMatch(x -> arrayOfStrings.streams
                                            .anyMatch(y -> x.customMethodReturnsBool(y)));