어떻게 자바에서 문자열의 다른 목록을 기반으로 구조 내 목록을 줄일 수있다?

randomuser1 :

내에서 Java응용 프로그램 나는 클래스가 :

public class MyStructure {

    SomeClass someClass;
    String[] fields;

    ...
}

지금, 나는 위의 구조의 목록을 가지고 :

List< MyStructure> structures = getStructures();

또한 문자열의 목록을 가지고 :

List<String> myList = getStrings();

I는 제리스트 (필터링해야 structures단지 자신의 해당 요소에 포함되도록) fields배열 문자열의 존재를 포함 할를 myList.

내가 좋아하는, 루프 뭔가를 작성에 대한 생각 :

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때문에 HashSet의 시간 복잡도 를 위해 contains입니다 O(1)항상. 그런 다음 사용 :

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

추천

출처http://10.200.1.11:23101/article/api/json?id=5008&siteId=1