Skip to content

Commit 948f541

Browse files
committed
streaming
1 parent 53f8900 commit 948f541

File tree

7 files changed

+24
-20
lines changed

7 files changed

+24
-20
lines changed

TODO

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
- Partial read
77
+ Write
88
- Partial write
9-
- List iterator
9+
+ List iterator
1010
+ Codec Builder
1111
+ Mutability (e.g. editing attributes, resizing)
1212
- Tests and docs

src/main/java/com/scalableminds/zarrjava/store/FilesystemStore.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,9 @@ public void delete(String[] keys) {
121121
}
122122
}
123123

124-
public String[] list(String[] keys) {
125-
try (Stream<Path> paths = Files.list(resolveKeys(keys))) {
126-
return paths.map(p -> p.toFile()
127-
.getName())
128-
.toArray(String[]::new);
124+
public Stream<String> list(String[] keys) {
125+
try {
126+
return Files.list(resolveKeys(keys)).map(p -> p.toFile().getName());
129127
} catch (IOException e) {
130128
throw new RuntimeException(e);
131129
}

src/main/java/com/scalableminds/zarrjava/store/S3Store.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import java.io.IOException;
1010
import java.io.InputStream;
1111
import java.nio.ByteBuffer;
12+
import java.util.stream.Stream;
1213
import javax.annotation.Nonnull;
1314
import javax.annotation.Nullable;
1415

@@ -85,15 +86,12 @@ public void delete(String[] keys) {
8586
}
8687

8788
@Override
88-
public String[] list(String[] keys) {
89+
public Stream<String> list(String[] keys) {
8990
final String fullKey = resolveKeys(keys);
9091
return s3client.listObjects(bucketName, fullKey)
9192
.getObjectSummaries()
9293
.stream()
93-
.map(
94-
p -> p.getKey()
95-
.substring(fullKey.length() + 1))
96-
.toArray(String[]::new);
94+
.map(p -> p.getKey().substring(fullKey.length() + 1));
9795
}
9896

9997
@Nonnull

src/main/java/com/scalableminds/zarrjava/store/Store.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.scalableminds.zarrjava.store;
22

3+
import java.io.IOException;
34
import java.nio.ByteBuffer;
5+
import java.util.stream.Stream;
46
import javax.annotation.Nonnull;
57
import javax.annotation.Nullable;
68

@@ -26,6 +28,6 @@ public interface Store {
2628

2729
interface ListableStore extends Store {
2830

29-
String[] list(String[] keys);
31+
Stream<String> list(String[] keys);
3032
}
3133
}

src/main/java/com/scalableminds/zarrjava/store/StoreHandle.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.scalableminds.zarrjava.utils.Utils;
44
import java.nio.ByteBuffer;
55
import java.nio.file.NoSuchFileException;
6+
import java.util.stream.Stream;
67
import javax.annotation.Nonnull;
78
import javax.annotation.Nullable;
89

@@ -54,7 +55,7 @@ public boolean exists() {
5455
return store.exists(keys);
5556
}
5657

57-
public String[] list() {
58+
public Stream<String> list() {
5859
if (!(store instanceof Store.ListableStore)) {
5960
throw new UnsupportedOperationException("The underlying store does not support listing.");
6061
}

src/main/java/com/scalableminds/zarrjava/v3/Group.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
import com.scalableminds.zarrjava.store.StoreHandle;
66
import java.io.IOException;
77
import java.nio.ByteBuffer;
8-
import java.util.Arrays;
98
import java.util.Map;
109
import java.util.Objects;
1110
import java.util.function.Function;
11+
import java.util.stream.Stream;
1212
import javax.annotation.Nonnull;
1313
import javax.annotation.Nullable;
1414

@@ -96,18 +96,23 @@ public Array createArray(String key, ArrayMetadata arrayMetadata)
9696
throws IOException, ZarrException {
9797
return Array.create(storeHandle.resolve(key), arrayMetadata);
9898
}
99-
100-
public Node[] list() {
101-
return Arrays.stream(storeHandle.list())
99+
100+
public Stream<Node> list() {
101+
return storeHandle.list()
102102
.map(key -> {
103103
try {
104104
return get(key);
105105
} catch (ZarrException e) {
106106
throw new RuntimeException(e);
107107
}
108108
})
109-
.filter(Objects::nonNull)
110-
.toArray(Node[]::new);
109+
.filter(Objects::nonNull);
110+
}
111+
112+
public Node[] listAsArray() {
113+
try (Stream<Node> nodeStream = list()) {
114+
return nodeStream.toArray(Node[]::new);
115+
}
111116
}
112117

113118
private Group writeMetadata(GroupMetadata newGroupMetadata) throws IOException {

src/test/java/com/scalableminds/zarrjava/ZarrTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public void testV3Group() throws IOException, ZarrException {
142142
);
143143
array.write(new long[]{2, 2}, ucar.ma2.Array.factory(ucar.ma2.DataType.UBYTE, new int[]{8, 8}));
144144

145-
assertArrayEquals(((Array) ((Group) group.list()[0]).list()[0]).metadata.chunkShape(),
145+
assertArrayEquals(((Array) ((Group) group.listAsArray()[0]).listAsArray()[0]).metadata.chunkShape(),
146146
new int[]{5, 5});
147147
}
148148

0 commit comments

Comments
 (0)