我有2个数组。在1个阵列中,我具有具有属性的虚拟机。在另一个数组中,我有属性值。我想遍历第一个数组,并从第二个数组中筛选出具有属性值的元素。但是,当我开始对其进行过滤时,会发生以下情况:
我开始第一个数组的迭代。对于第一个数组的每个元素,我都会遍历第二个数组的每个元素,并比较它们的值,但是它不起作用,因为它会从第二个数组中获取值,因此我需要使用逻辑和(&&)。
for (VirtualMachine vm: VmArray) {
listOfVirtualMachinesToBuild.forEach(
vmFilter-> {
if (vmFilter.getType().equals(vm.getType())) {
Optional<DslModel.DiscoverIf[]> discoverIfOptional =
Optional.ofNullable(vmFilter.getDiscoverIf());
if (discoverIfOptional.isPresent())
for (int i = 0; i < vmFilter.getDiscoverIf().length; i++) {
if (vm.getProperty(
vmFilter.getDiscoverIf()[i].getCondition())
.equals(vmFilter.getDiscoverIf()[i].getValue())) {
specificEntitiesToBuild.add(vm);
}
}
} else {
specificEntitiesToBuild.add(vm);
}
}
});
}
您有任何想法吗?
答案 0 :(得分:-1)
您可以使用Stream API。我将用String
s进行演示,但同样适用于任何课程:
String[] strings = {"a", "b", "c"};
Stream<String> stream = Arrays.stream(strings);
String[] filtered = stream.filter(s -> s.equals("a")).toArray(String[]::new);
如果您想检查String
中是否包含String[]
(以查找“属性”),我认为您可以这样做:
public boolean propertyExists(String property) {
return Arrays.stream(propertyArray).anyMatch(s -> s.equals(property));
}
目前还不清楚您要问什么,所以这是我的最佳猜测。如果您编辑问题以显示实际代码,将更容易获得帮助。