如何在 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)));
我对 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)));