File tree Expand file tree Collapse file tree 2 files changed +27
-13
lines changed
main/java/org/codejive/properties
test/java/org/codejive/properties Expand file tree Collapse file tree 2 files changed +27
-13
lines changed Original file line number Diff line number Diff line change 22
33import java .io .IOException ;
44import java .io .Reader ;
5- import java .util .ArrayList ;
6- import java .util .List ;
75import java .util .Objects ;
6+ import java .util .Spliterators ;
7+ import java .util .function .Consumer ;
88import java .util .function .Supplier ;
9+ import java .util .stream .Stream ;
10+ import java .util .stream .StreamSupport ;
911
1012class 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}
Original file line number Diff line number Diff line change 88import java .util .Arrays ;
99import java .util .List ;
1010import java .util .stream .Collectors ;
11+ import java .util .stream .Stream ;
12+
1113import org .junit .jupiter .api .Test ;
1214
1315import 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}
You can’t perform that action at this time.
0 commit comments