如何根据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());