diff --git a/gradlew b/gradlew old mode 100755 new mode 100644 diff --git a/src/main/java/org/json/JSONArray.java b/src/main/java/org/json/JSONArray.java index d3fa666c3..7047e0589 100644 --- a/src/main/java/org/json/JSONArray.java +++ b/src/main/java/org/json/JSONArray.java @@ -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; /** @@ -67,7 +63,7 @@ * @author JSON.org * @version 2016-08/15 */ -public class JSONArray { +public class JSONArray implements Iterable { /** * The arrayList where the JSONArray's properties are kept. @@ -230,56 +226,11 @@ public JSONArray(int initialCapacity) throws JSONException { this.myArrayList = new ArrayList(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 stream() { - Iterator iterator = new Iterator() { - 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 spliterator() { - Iterator iterator = new Iterator() { - 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 iterator() { return this.myArrayList.iterator(); } diff --git a/src/main/java/org/json/JSONObject.java b/src/main/java/org/json/JSONObject.java index 7e7105aa1..29b1115b8 100644 --- a/src/main/java/org/json/JSONObject.java +++ b/src/main/java/org/json/JSONObject.java @@ -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 @@ -86,7 +74,21 @@ * @author JSON.org * @version 2016-08-15 */ -public class JSONObject { +public class JSONObject implements Iterable { + @Override + public Iterator iterator() { + return null; + } + + @Override + public void forEach(Consumer action) { + Iterable.super.forEach(action); + } + + @Override + public Spliterator spliterator() { + return Iterable.super.spliterator(); + } /** * JSONObject.NULL is equivalent to the value that JavaScript calls null, @@ -467,30 +469,8 @@ protected JSONObject(int initialCapacity){ this.map = new HashMap(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 streamKeys() { - Iterator keys = this.keys(); - return StreamSupport.stream( - Spliterators.spliteratorUnknownSize( - new Iterator() { - @Override - public boolean hasNext() { - return keys.hasNext(); - } - - @Override - public String next() { - return keys.next(); - } - }, - Spliterator.ORDERED | Spliterator.IMMUTABLE - ), - false - ); + public Stream stream() { + return keySet().stream(); } /** diff --git a/src/test/java/org/json/junit/JSONMLTest.java b/src/test/java/org/json/junit/JSONMLTest.java index 917f5cd08..35c0af2c4 100644 --- a/src/test/java/org/json/junit/JSONMLTest.java +++ b/src/test/java/org/json/junit/JSONMLTest.java @@ -8,7 +8,6 @@ import org.json.*; import org.junit.Test; -import org.junit.Ignore; /** * Tests for org.json.JSONML.java @@ -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 diff --git a/src/test/java/org/json/junit/JSONObjectTest.java b/src/test/java/org/json/junit/JSONObjectTest.java index a3de9009b..3fc9f7dc3 100644 --- a/src/test/java/org/json/junit/JSONObjectTest.java +++ b/src/test/java/org/json/junit/JSONObjectTest.java @@ -103,7 +103,7 @@ public void testStream() { // Get employees from the Engineering department List actualList = new ArrayList<>(); - jsonObject.streamKeys() + jsonObject.stream() .filter(key -> key.startsWith("employees")) .map(jsonObject::getJSONArray) .flatMap(JSONArray::stream)