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());