Skip to content

Commit

Permalink
Revert "streams - remove implements from JSONObject and JSONArray"
Browse files Browse the repository at this point in the history
This reverts commit 4cea301.
  • Loading branch information
Sean Leary authored and Sean Leary committed Sep 4, 2023
1 parent 4cea301 commit c619419
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 96 deletions.
Empty file modified gradlew
100755 → 100644
Empty file.
57 changes: 4 additions & 53 deletions src/main/java/org/json/JSONArray.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,8 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import java.util.Objects;
import java.util.function.Supplier;
import java.util.stream.StreamSupport;
import java.util.Spliterators;
import java.util.Spliterator;


/**
Expand Down Expand Up @@ -67,7 +63,7 @@
* @author JSON.org
* @version 2016-08/15
*/
public class JSONArray {
public class JSONArray implements Iterable<Object> {

/**
* The arrayList where the JSONArray's properties are kept.
Expand Down Expand Up @@ -230,56 +226,11 @@ public JSONArray(int initialCapacity) throws JSONException {
this.myArrayList = new ArrayList<Object>(initialCapacity);
}

/**
* Support for streams.
* TODO: This can be simplified when the project is updated to Java 9 or later
* @return Stream of array elements for this object
*/
public Stream<Object> stream() {
Iterator<Object> iterator = new Iterator<Object>() {
private int index = 0;
private int max = length();

@Override
public boolean hasNext() {
return index < max;
}

@Override
public Object next() {
return get(index++);
}
};

return StreamSupport.stream(
Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED),
false
);
}

/**
* Returns a Spliterator over the elements in this JSONArray.
* @return Spliterator object
*/
public Spliterator<Object> spliterator() {
Iterator<Object> iterator = new Iterator<Object>() {
private int index = 0;
private int max = length();

@Override
public boolean hasNext() {
return index < max;
}

@Override
public Object next() {
return get(index++);
}
};

return Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED);
return IntStream.range(0, length()).mapToObj(this::get);
}

@Override
public Iterator<Object> iterator() {
return this.myArrayList.iterator();
}
Expand Down
56 changes: 18 additions & 38 deletions src/main/java/org/json/JSONObject.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,11 @@
import java.lang.reflect.Modifier;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.*;
import java.util.Map.Entry;
import java.util.Set;
import java.util.function.Consumer;
import java.util.regex.Pattern;
import java.util.stream.Stream;
import java.util.ResourceBundle;
import java.util.stream.StreamSupport;
import java.util.Spliterators;
import java.util.Spliterator;

/**
* A JSONObject is an unordered collection of name/value pairs. Its external
Expand Down Expand Up @@ -86,7 +74,21 @@
* @author JSON.org
* @version 2016-08-15
*/
public class JSONObject {
public class JSONObject implements Iterable<String> {
@Override
public Iterator<String> iterator() {
return null;
}

@Override
public void forEach(Consumer<? super String> action) {
Iterable.super.forEach(action);
}

@Override
public Spliterator<String> spliterator() {
return Iterable.super.spliterator();
}

/**
* JSONObject.NULL is equivalent to the value that JavaScript calls null,
Expand Down Expand Up @@ -467,30 +469,8 @@ protected JSONObject(int initialCapacity){
this.map = new HashMap<String, Object>(initialCapacity);
}

/**
* Support for streams
* TODO: This can be simplified when the project is updated to Java 9 or later
* @return Stream of keys for this object
*/
public Stream<String> streamKeys() {
Iterator<String> keys = this.keys();
return StreamSupport.stream(
Spliterators.spliteratorUnknownSize(
new Iterator<String>() {
@Override
public boolean hasNext() {
return keys.hasNext();
}

@Override
public String next() {
return keys.next();
}
},
Spliterator.ORDERED | Spliterator.IMMUTABLE
),
false
);
public Stream<String> stream() {
return keySet().stream();
}

/**
Expand Down
5 changes: 1 addition & 4 deletions src/test/java/org/json/junit/JSONMLTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

import org.json.*;
import org.junit.Test;
import org.junit.Ignore;

/**
* Tests for org.json.JSONML.java
Expand Down Expand Up @@ -114,9 +113,7 @@ public void nonXMLException() {
* in a nested JSONArray) to a JSONArray then back to string.
* Expects a JSONException
*/

// TODO: Restore after figuring out why this test is failing
@Ignore
@Test
public void emptyTagException() {
/**
* jsonArrayStr is used to build a JSONArray which is then
Expand Down
2 changes: 1 addition & 1 deletion src/test/java/org/json/junit/JSONObjectTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public void testStream() {
// Get employees from the Engineering department
List<String> actualList = new ArrayList<>();

jsonObject.streamKeys()
jsonObject.stream()
.filter(key -> key.startsWith("employees"))
.map(jsonObject::getJSONArray)
.flatMap(JSONArray::stream)
Expand Down

0 comments on commit c619419

Please sign in to comment.