리포지토리의 데이터를 반환하는 N 목록이 있습니다. 이 세 목록 중 첫 번째가 아닌 공백을 반환하고 싶습니다 (각각 다른 SQL을 실행하여 데이터를 가져옵니다).Java 8에서 첫 번째 비어 있지 않은 목록을 늦게 반환
캐치는 느리게 수행하기 때문에 수용 가능한 결과를 이미 찾은 경우 데이터베이스에서 SQL을 실행할 필요가 없습니다. 내 코드가 (수정 된)
@Override
public List<Something> dataService(Data data) {
return firstNonEmptyList(repository.getDataWayOne(data.getParameter()),
repository.getDataWayTwo(data.getParameter()),
repository.getDataWayThree(data.getParameter().getAcessoryParameter())
Collections.singletonList(repository.getDefaultData(data.getParameter()));
}
@SafeVarargs
private final List<Something> firstNonEmptyList(List<Something>... lists) {
for (List<Something> list : lists) {
if (!list.isEmpty()) {
return list;
}
}
return null;
}
이 작동하지만 게으른 없습니다. 어떤 아이디어?
내가 틀렸다면 정정 해주세요. 그러나 lambdas 내부에서 목록 호출을 감추면 게으른다고 생각합니다. 'firstNonEmptyList'에서 당신이 원하는 것을 찾을 때까지 (즉, 비어 있지 않은리스트를 반환하는) 각각의 람다를 평가할 것입니다. 람다라고 불리는 것이 결코 쿼리를 실행하지 않습니다. 어쨌든, shmosel이 제공 한 솔루션은 제가 설명하고 더 우아합니다. – Gabriel