Skip to content

Commit cb981f2

Browse files
committed
refactor: PropertiesParser.tokens() now returns a Stream
1 parent b8577c6 commit cb981f2

File tree

2 files changed

+27
-13
lines changed

2 files changed

+27
-13
lines changed

src/main/java/org/codejive/properties/PropertiesParser.java

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import java.io.IOException;
44
import java.io.Reader;
5-
import java.util.ArrayList;
6-
import java.util.List;
75
import java.util.Objects;
6+
import java.util.Spliterators;
7+
import java.util.function.Consumer;
88
import java.util.function.Supplier;
9+
import java.util.stream.Stream;
10+
import java.util.stream.StreamSupport;
911

1012
class PropertiesParser {
1113

@@ -195,13 +197,23 @@ private boolean isEof(int ch) {
195197
return ch == -1;
196198
}
197199

198-
public static List<Token> tokens(Reader rdr) throws IOException {
199-
List<Token> result = new ArrayList<>();
200-
PropertiesParser p = new PropertiesParser(rdr);
201-
Token token;
202-
while ((token = p.nextToken()) != null) {
203-
result.add(token);
204-
}
205-
return result;
200+
public static Stream<Token> tokens(Reader rdr) throws IOException {
201+
return StreamSupport.stream(new Spliterators.AbstractSpliterator<Token>(0, 0) {
202+
final PropertiesParser p = new PropertiesParser(rdr);
203+
@Override
204+
public boolean tryAdvance(Consumer<? super Token> action) {
205+
try {
206+
Token token = p.nextToken();
207+
if (token != null) {
208+
action.accept(token);
209+
return true;
210+
} else {
211+
return false;
212+
}
213+
} catch (IOException ex) {
214+
throw new RuntimeException(ex);
215+
}
216+
}
217+
}, false);
206218
}
207219
}

src/test/java/org/codejive/properties/TestPropertiesParser.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import java.util.Arrays;
99
import java.util.List;
1010
import java.util.stream.Collectors;
11+
import java.util.stream.Stream;
12+
1113
import org.junit.jupiter.api.Test;
1214

1315
import org.codejive.properties.PropertiesParser.Token;
@@ -35,7 +37,7 @@ public class TestPropertiesParser {
3537
@Test
3638
void testTokens() throws IOException {
3739
StringReader rdr = new StringReader(props);
38-
List<PropertiesParser.Token> tokens = PropertiesParser.tokens(rdr);
40+
List<PropertiesParser.Token> tokens = PropertiesParser.tokens(rdr).collect(Collectors.toList());
3941
assertThat(
4042
tokens,
4143
equalTo(
@@ -82,8 +84,8 @@ void testTokens() throws IOException {
8284
@Test
8385
void testStringify() throws IOException {
8486
StringReader rdr = new StringReader(props);
85-
List<PropertiesParser.Token> tokens = PropertiesParser.tokens(rdr);
86-
String props2 = tokens.stream().map(Token::getText).collect(Collectors.joining());
87+
Stream<Token> tokens = PropertiesParser.tokens(rdr);
88+
String props2 = tokens.map(Token::getText).collect(Collectors.joining());
8789
assertThat(props2, equalTo(props));
8890
}
8991
}

0 commit comments

Comments
 (0)