首页 > 解决方案 > 如何使用条件数组过滤数组

问题描述

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

你有什么想法吗?

标签: javaarrays

解决方案


您可以使用流 API。我将使用 s 进行演示,String但同样适用于任何课程:

String[] strings = {"a", "b", "c"};
Stream<String> stream = Arrays.stream(strings);
String[] filtered = stream.filter(s -> s.equals("a")).toArray(String[]::new);

如果您想检查 aString是否包含在 a 中String[](以查找“属性”),我认为您的意图是,您可以执行以下操作:

public boolean propertyExists(String property) {
    return Arrays.stream(propertyArray).anyMatch(s -> s.equals(property));
}

有点不清楚你在问什么,所以这是我最好的猜测。如果您编辑您的问题以显示您的实际代码,它会更容易提供帮助。


推荐阅读