Giriş
1. ResultSet nesnesi iterator ile sarmalanır
2. Iterator nesnesi StreamSupport kullanılarak Stream'e çevrilir.
3. Sonra şöyle yaparız
Stream<ResultSet> resultSetStream = ...
resultSetStream
.limit(5) // Take the first 5 items
.forEach(row -> {
// Process the row here
});
Çevrim
Örnek
Elimizde şöyle bir kod olsun
public static void closeResource(AutoCloseable closeable) {
if (closeable == null) {
return;
}
try {
closeable.close();
} catch (Exception e) {
...
}
}
Şöyle yaparız. Burada ResultSet kapatılıyor.
Not : Sarmalayan iterator Java Iterator arayüzünü tam gerçekleştirmiyor. Çünkü hasNext() çağrısının yapılmasını şart hale getirmiş ama çok önemli değil çünkü SplitIterator sınıfı Iterator.hasNext() çağrısı yapmayı garanti ediyor.
public static Stream<ResultSet> toStream(ResultSet resultSet) {
Spliterator<ResultSet> spliterator = Spliterators.spliteratorUnknownSize(
new Iterator<>() {
@Override
public boolean hasNext() {
try {
return resultSet.next();
} catch (SQLException sqlException) {
return false;
}
}
@Override
public ResultSet next() {
return resultSet;
}
},
Spliterator.IMMUTABLE | Spliterator.NONNULL | Spliterator.ORDERED
);
return StreamSupport.stream(spliterator, false).onClose(() -> closeResource(resultSet));
}
Hiç yorum yok:
Yorum Gönder