如何根据Java中的其他字符串列表减少结构列表?

如何根据Java中的其他字符串列表减少结构列表?,java,for-loop,java-8,java-stream,Java,For Loop,Java 8,Java Stream,在我的Java应用程序中,我有一个类: public class MyStructure { SomeClass someClass; String[] fields; ... } 现在,我有一个以上结构的列表: List< MyStructure> structures = getStructures(); 但也许有更好的办法?谢谢 为了获得更好的性能,您可以转换列表myList=getStrings()设置为设置mySet,因为包含的始终是O(1)

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

public class MyStructure {

    SomeClass someClass;
    String[] fields;

    ...
}
现在,我有一个以上结构的列表:

List< MyStructure> structures = getStructures();

但也许有更好的办法?谢谢

为了获得更好的性能,您可以转换
列表myList=getStrings()设置为
设置mySet
,因为
包含的
始终是
O(1)
。然后使用:

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

这不管用吗?看看Java流媒体功能。我相信这正是您想要的。我认为有一些问题,collect函数在这里不可见,也许我应该调用anyMatch结果以外的其他东西,返回布尔值?@randomuser1您是否确保代码中的括号正确匹配?试用当前代码,我可以确认它编译成功。
List<MyStructure> outcomeStructures = new ArrayList<>(); 

for (MyStructure mystructure : structures) {
    for (String temp : mystructure.getFields()) {
        if (myList.contains(temp) {
            outcomeStructures.add(mystructure);
        }
    }
}
List<MyStructure> outcomeStructures = structures.stream()
        .filter(st -> Arrays.stream(st.getFields()).anyMatch(mySet::contains))
        .collect(Collectors.toList());