如何使用条件数组过滤数组

时间:2019-08-14 10:49:34

标签: java arrays

我有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);
                            }
                        }
                    });
        }

您有任何想法吗?

1 个答案:

答案 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));
}

目前还不清楚您要问什么,所以这是我的最佳猜测。如果您编辑问题以显示实际代码,将更容易获得帮助。