如何基于Java中其他字符串列表来减少结构列表?

问题描述 投票:3回答:1

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

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

java for-loop java-8 java-stream
1个回答
4
投票

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

List<MyStructure> outcomeStructures = structures.stream()
        .filter(st -> Arrays.stream(st.getFields()).anyMatch(mySet::contains))
        .collect(Collectors.toList());
© www.soinside.com 2019 - 2024. All rights reserved.