在我的Java应用程序中,我有一个类:

public class MyStructure {

    SomeClass someClass;
    String[] fields;

    ...
}

现在,我有了上面的结构列表:
List< MyStructure> structures = getStructures();

我也有一个字符串列表:
List<String> myList = getStrings();

我需要过滤第一个列表(structures),以便它仅包含元素,这些元素在fields数组中包含myList上存在的任何字符串。

我考虑过要编写for循环,例如:
List<MyStructure> outcomeStructures = new ArrayList<>();

for (MyStructure mystructure : structures) {
    for (String temp : mystructure.getFields()) {
        if (myList.contains(temp) {
            outcomeStructures.add(mystructure);
        }
    }
}

但是也许有更好的方法呢?谢谢!

最佳答案

为了获得更好的性能,您可以将List<String> myList = getStrings();转换为Set<String> mySet,因为containsHashSet time complexity始终为O(1)。然后使用:

List<MyStructure> outcomeStructures = structures.stream()
        .filter(st -> Arrays.stream(st.getFields()).anyMatch(mySet::contains))
        .collect(Collectors.toList());

09-26 06:49