Module json_values
Package jsonvalues

Class JsArray

java.lang.Object
jsonvalues.JsArray
All Implemented Interfaces:
Iterable<JsValue>, Json<JsArray>, JsValue

public final class JsArray extends Object implements Json<JsArray>, Iterable<JsValue>
Represents an immutable and persistent JSON array. It's an ordered list of elements.
  • Field Details

  • Method Details

    • empty

      public static JsArray empty()
      Returns the empty JSON array
      Returns:
      the empty JSON array
    • of

      public static JsArray of(JsValue e, JsValue e1, JsValue e2, JsValue e3, JsValue e4, JsValue... rest)
      Returns an immutable array.
      Returns:
      an immutable JsArray
    • of

      public static JsArray of(JsValue e, JsValue e1, JsValue e2, JsValue e3, JsValue e4)
      Returns an immutable and persistent five-element array.
      Parameters:
      e - a JsValue
      e1 - a JsValue
      e2 - a JsValue
      e3 - a JsValue
      e4 - a JsValue
      Returns:
      an immutable and persistent five-element JsArray
    • of

      public static JsArray of(JsValue e, JsValue e1, JsValue e2, JsValue e3)
      Returns an immutable four-element array.
      Parameters:
      e - a JsValue
      e1 - a JsValue
      e2 - a JsValue
      e3 - a JsValue
      Returns:
      an immutable four-element JsArray
    • of

      public static JsArray of(JsValue e, JsValue e1, JsValue e2)
      Returns an immutable three-element array.
      Parameters:
      e - a JsValue
      e1 - a JsValue
      e2 - a JsValue
      Returns:
      an immutable three-element JsArray
    • of

      public static JsArray of(JsValue e, JsValue e1)
      Returns an immutable two-element array.
      Parameters:
      e - a JsValue
      e1 - a JsValue
      Returns:
      an immutable two-element JsArray
    • of

      public static JsArray of(JsValue e)
    • of

      public static JsArray of(String str, String... others)
      Returns an immutable array from one or more strings.
      Parameters:
      str - a string
      others - more optional strings
      Returns:
      an immutable JsArray
    • of

      public static JsArray of(int number, int... others)
      Returns an immutable array from one or more integers.
      Parameters:
      number - an integer
      others - more optional integers
      Returns:
      an immutable JsArray
    • of

      public static JsArray of(boolean bool, boolean... others)
      Returns an immutable array from one or more booleans.
      Parameters:
      bool - an boolean
      others - more optional booleans
      Returns:
      an immutable JsArray
    • of

      public static JsArray of(long number, long... others)
      Returns an immutable array from one or more longs.
      Parameters:
      number - a long
      others - more optional longs
      Returns:
      an immutable JsArray
    • of

      public static JsArray of(BigInteger number, BigInteger... others)
      Returns an immutable array from one or more big integers.
      Parameters:
      number - a big integer
      others - more optional big integers
      Returns:
      an immutable JsArray
    • of

      public static JsArray of(double number, double... others)
      Returns an immutable array from one or more doubles.
      Parameters:
      number - a double
      others - more optional doubles
      Returns:
      an immutable JsArray
    • ofIterable

      public static JsArray ofIterable(Iterable<? extends JsValue> iterable)
      returns an immutable json array from an iterable of json elements
      Parameters:
      iterable - the iterable of json elements
      Returns:
      an immutable json array
    • parse

      public static JsArray parse(String str) throws JsParserException
      Parses the given string into an immutable and persistent JSON array.
      Parameters:
      str - the string to be parsed
      Returns:
      a JsArray
      Throws:
      JsParserException - if the string doesnt represent a json array
    • parse

      public static JsArray parse(byte[] bytes) throws JsParserException
      Parses the given array of bytes into an immutable and persistent JSON array.
      Parameters:
      bytes - the array of bytes
      Returns:
      a JsArray
      Throws:
      JsParserException - if the string doesn't represent a JSON array
    • append

      public JsArray append(JsValue e, JsValue... others)
      Adds one or more elements, starting from the first, to the back of this array.
      Parameters:
      e - the JsValue to be added to the back.
      others - more optional JsValue to be added to the back
      Returns:
      a new JsArray
    • appendAll

      public JsArray appendAll(JsArray array)
      Adds all the elements of the given array, starting from the head, to the back of this array.
      Parameters:
      array - the JsArray of elements to be added to the back
      Returns:
      a new JsArray
    • equals

      public boolean equals(JsArray array, JsArray.TYPE ARRAY_AS)
      Returns true if this array is equal to the given as a parameter. In the case of ARRAY_AS=LIST, this method is equivalent to JsArray.equals(Object).
      Parameters:
      array - the given array
      ARRAY_AS - option to define if arrays are considered SETS, LISTS OR MULTISET
      Returns:
      true if both arrays are equals according to ARRAY_AS parameter
    • getInt

      public Integer getInt(int index)
      Returns the integral number located at the given index as an integer or null if it doesn't exist or it's not an integral number or it's an integral number but doesn't fit in an integer.
      Parameters:
      index - the index
      Returns:
      the integral number located at the given index or null
    • getInt

      public Integer getInt(int index, Supplier<Integer> orElse)
      Returns the integral number located at the given index as an integer or the default value provided if it doesn't exist or it's not an integral number or it's an integral number but doesn't fit in an integer.
      Parameters:
      index - the index
      orElse - the default value
      Returns:
      the integral number located at the given index or null
    • getLong

      public Long getLong(int index)
      Returns the long number located at the given index as an long or null if it doesn't exist or it's not an integral number or it's an integral number but doesn't fit in an long.
      Parameters:
      index - the index
      Returns:
      the long number located at the given index or null
    • getLong

      public Long getLong(int index, Supplier<Long> orElse)
      Returns the long number located at the given index as an long or the default value provided if it doesn't exist or it's not an integral number or it's an integral number but doesn't fit in an long.
      Parameters:
      index - the index
      orElse - the default value
      Returns:
      the long number located at the given index or the default value provided
    • getStr

      public String getStr(int index)
      Returns the string located at the given index or null if it doesn't exist.
      Parameters:
      index - the index
      Returns:
      the string located at the given index or null
    • getStr

      public String getStr(int index, Supplier<String> orElse)
      Returns the string located at the given index or the default value provided if it doesn't exist.
      Parameters:
      index - the index
      orElse - the default value
      Returns:
      the string located at the given index or the default value
    • getInstant

      public Instant getInstant(int index)
      Returns the instant located at the given index or null if it doesn't exist or it's not an instant. If the element is an instant formatted as a string, it's returned as an instant as well.
      Parameters:
      index - the given index
      Returns:
      an instant
    • getInstant

      public Instant getInstant(int index, Supplier<Instant> orElse)
      Returns the instant located at the given index or the default value provided if it doesn't exist or it's not an instant. If the element is an instant formatted as a string, it's returned as an instant as well.
      Parameters:
      index - the given index
      orElse - the default value
      Returns:
      an instant
    • getBinary

      public byte[] getBinary(int index)
      Returns the array of bytes located at the given index or null if it doesn't exist or it's not an array of bytes. If the element is a string in base64, it's returned as an array of bytes as well.
      Parameters:
      index - the given index
      Returns:
      an array of bytes
    • getBinary

      public byte[] getBinary(int index, Supplier<byte[]> orElse)
      Returns the array of bytes located at the given index or the default value provided if it doesn't exist or it's not an array of bytes. If the element is a string in base64, it's returned as an array of bytes as well.
      Parameters:
      index - the given index
      orElse - the default value
      Returns:
      an array of bytes
    • getBool

      public Boolean getBool(int index)
      Returns the boolean located at the given index or null if it doesn't exist.
      Parameters:
      index - the index
      Returns:
      the boolean located at the given index or null
    • getBool

      public Boolean getBool(int index, Supplier<Boolean> orElse)
      Returns the boolean located at the given index or the default value provided if it doesn't exist.
      Parameters:
      index - the index
      orElse - the default value
      Returns:
      the boolean located at the given index or the default value provided
    • getDouble

      public Double getDouble(int index)
      Returns the number located at the given index as a double or null if it doesn't exist or it's not a decimal number. If the number is a BigDecimal, the conversion is identical to the specified in BigDecimal.doubleValue() and in some cases it can lose information about the precision of the BigDecimal
      Parameters:
      index - the index
      Returns:
      the double number located at the given index or null
    • getDouble

      public Double getDouble(int index, Supplier<Double> orElse)
      Returns the number located at the given index as a double or the default value provided if it doesn't exist or it's not a decimal number. If the number is a BigDecimal, the conversion is identical to the specified in BigDecimal.doubleValue() and in some cases it can lose information about the precision of the BigDecimal
      Parameters:
      index - the index
      orElse - the default value
      Returns:
      the double number located at the given index or null
    • getBigDec

      public BigDecimal getBigDec(int index)
      Returns the number located at the given index as a big decimal or null if it doesn't exist or it's not a decimal number.
      Parameters:
      index - the index
      Returns:
      the decimal number located at the given index or null
    • getBigDec

      public BigDecimal getBigDec(int index, Supplier<BigDecimal> orElse)
      Returns the number located at the given index as a big decimal or the default value provided if it doesn't exist or it's not a decimal number.
      Parameters:
      index - the index
      orElse - the default value
      Returns:
      the decimal number located at the given index or the default value provided
    • getBigInt

      public BigInteger getBigInt(int index)
      Returns the number located at the given index as a big integer or null if it doesn't exist or it's not an integral number.
      Parameters:
      index - the index
      Returns:
      the integral number located at the given index or null
    • getBigInt

      public BigInteger getBigInt(int index, Supplier<BigInteger> orElse)
      Returns the number located at the given index as a big integer or the default value provided if it doesn't exist or it's not an integral number.
      Parameters:
      index - the index
      orElse - the default value provided
      Returns:
      the integral number located at the given index or null
    • getObj

      public JsObj getObj(int index)
      Returns the object located at the given index or null if it doesn't exist or it's not a json object.
      Parameters:
      index - the index
      Returns:
      the object located at the given index or null
    • getObj

      public JsObj getObj(int index, Supplier<JsObj> orElse)
      Returns the object located at the given index or the default value provided if it doesn't exist or it's not a json object.
      Parameters:
      index - the index
      orElse - the default value
      Returns:
      the object located at the given index or the default value provided
    • getArray

      public JsArray getArray(int index)
      Returns the array located at the given index or null if it doesn't exist or it's not a json array.
      Parameters:
      index - the index
      Returns:
      the array located at the given index or null
    • getArray

      public JsArray getArray(int index, Supplier<JsArray> orElse)
      Returns the array located at the given index or the default value provided if it doesn't exist or it's not a json array.
      Parameters:
      index - the index
      orElse - the default value
      Returns:
      the array located at the given index or the default value provided
    • containsValue

      public boolean containsValue(JsValue el)
      Description copied from interface: Json
      Returns true if this json contains the given element in the first level.
      Specified by:
      containsValue in interface Json<JsArray>
      Parameters:
      el - the give element JsValue whose presence in this JsArray is to be tested
      Returns:
      true if this JsArray contains the JsValue
    • get

      public JsValue get(JsPath path)
      Description copied from interface: Json
      Returns the element located at the given path or JsNothing if it doesn't exist.
      Specified by:
      get in interface Json<JsArray>
      Parameters:
      path - the JsPath object of the element that will be returned
      Returns:
      the JsValue located at the given JsPath or JsNothing if it doesn't exist
    • filterValues

      public JsArray filterValues(BiPredicate<? super JsPath,? super JsPrimitive> filter)
      Description copied from interface: Json
      Filters all the pairs of elements of this json, removing those that don't ifPredicateElse the predicate.
      Specified by:
      filterValues in interface Json<JsArray>
      Parameters:
      filter - the predicate which takes as the input every JsPair of this json
      Returns:
      same this instance if all the pairs satisfy the predicate or a new filtered json of the same type T
    • filterValues

      public JsArray filterValues(Predicate<? super JsPrimitive> filter)
      Description copied from interface: Json
      Filters all the pairs of elements of this json, removing those that don't ifPredicateElse the predicate.
      Specified by:
      filterValues in interface Json<JsArray>
      Parameters:
      filter - the predicate which takes as the input every JsPair of this json
      Returns:
      same this instance if all the pairs satisfy the predicate or a new filtered json of the same type T
    • filterKeys

      public JsArray filterKeys(BiPredicate<? super JsPath,? super JsValue> filter)
      Description copied from interface: Json
      Filters all the keys of this json, removing those that don't ifPredicateElse the predicate.
      Specified by:
      filterKeys in interface Json<JsArray>
      Parameters:
      filter - the predicate which takes as the input every JsPair of this json
      Returns:
      same this instance if all the keys satisfy the predicate or a new filtered json of the same type T
    • filterKeys

      public JsArray filterKeys(Predicate<? super String> filter)
      Description copied from interface: Json
      Filters all the keys of this json, removing those that don't ifPredicateElse the predicate.
      Specified by:
      filterKeys in interface Json<JsArray>
      Parameters:
      filter - the predicate which takes as the input every JsPair of this json
      Returns:
      same this instance if all the keys satisfy the predicate or a new filtered json of the same type T
    • filterObjs

      public JsArray filterObjs(BiPredicate<? super JsPath,? super JsObj> filter)
      Description copied from interface: Json
      Filters all the pair of jsons of this json, removing those that don't ifPredicateElse the predicate.
      Specified by:
      filterObjs in interface Json<JsArray>
      Parameters:
      filter - the predicate which takes as the input every JsPair of this json
      Returns:
      same this instance if all the pairs satisfy the predicate or a new filtered json of the same type T
    • filterObjs

      public JsArray filterObjs(Predicate<? super JsObj> filter)
      Description copied from interface: Json
      Filters all the pair of jsons of this json, removing those that don't ifPredicateElse the predicate.
      Specified by:
      filterObjs in interface Json<JsArray>
      Parameters:
      filter - the predicate which takes as the input every JsPair of this json
      Returns:
      same this instance if all the pairs satisfy the predicate or a new filtered json of the same type T
    • isEmpty

      public boolean isEmpty()
      Description copied from interface: Json
      return true if there's no element in this json
      Specified by:
      isEmpty in interface Json<JsArray>
      Returns:
      true if empty, false otherwise
    • mapValues

      public JsArray mapValues(BiFunction<? super JsPath,? super JsPrimitive,? extends JsValue> fn)
      Description copied from interface: Json
      Maps all the values of this json.
      Specified by:
      mapValues in interface Json<JsArray>
      Parameters:
      fn - the mapping function
      Returns:
      a new mapped json of the same type T
    • mapValues

      public JsArray mapValues(Function<? super JsPrimitive,? extends JsValue> fn)
      Description copied from interface: Json
      Maps all the values of this json.
      Specified by:
      mapValues in interface Json<JsArray>
      Parameters:
      fn - the mapping function
      Returns:
      a new mapped json of the same type T
    • mapKeys

      public JsArray mapKeys(BiFunction<? super JsPath,? super JsValue,String> fn)
      Description copied from interface: Json
      Maps all the keys of this json.
      Specified by:
      mapKeys in interface Json<JsArray>
      Parameters:
      fn - the mapping function
      Returns:
      a new mapped json of the same type T
    • mapKeys

      public JsArray mapKeys(Function<? super String,String> fn)
      Description copied from interface: Json
      Maps all the keys of this json.
      Specified by:
      mapKeys in interface Json<JsArray>
      Parameters:
      fn - the mapping function
      Returns:
      a new mapped json of the same type T
    • mapObjs

      public JsArray mapObjs(BiFunction<? super JsPath,? super JsObj,? extends JsValue> fn)
      Description copied from interface: Json
      Maps all the jsons of this json.
      Specified by:
      mapObjs in interface Json<JsArray>
      Parameters:
      fn - the mapping function
      Returns:
      a new mapped json of the same type T
    • mapObjs

      public JsArray mapObjs(Function<? super JsObj,? extends JsValue> fn)
      Description copied from interface: Json
      Maps all the jsons of this json.
      Specified by:
      mapObjs in interface Json<JsArray>
      Parameters:
      fn - the mapping function
      Returns:
      a new mapped json of the same type T
    • set

      public JsArray set(JsPath path, JsValue element)
      Description copied from interface: Json
      Inserts the element at the path in this json, replacing any existing element and filling with JsNull empty indexes in arrays when necessary.

      The same instance is returned when the head of the path is a key and this is an array or the head of the path is an index and this is an object or the element is JsNothing

      Specified by:
      set in interface Json<JsArray>
      Parameters:
      path - the JsPath object where the element will be inserted at
      element - the JsValue that will be inserted
      Returns:
      the same instance or a new json of the same type T
    • set

      public JsArray set(int index, JsValue element)
    • set

      public JsArray set(int index, JsValue value, JsValue padElement)
    • set

      public JsArray set(JsPath path, JsValue value, JsValue padElement)
      Description copied from interface: Json
      Inserts the element at the path in this json, replacing any existing element and filling with padElement empty indexes in arrays when necessary.

      The same instance is returned when the head of the path is a key and this is an array or the head of the path is an index and this is an object or the element is JsNothing

      Specified by:
      set in interface Json<JsArray>
      Parameters:
      path - the JsPath object where the element will be inserted at
      value - the JsValue that will be inserted
      padElement - the JsValue that will be inserted in arrays when padding is necessary
      Returns:
      the same instance or a new json of the same type T
    • reduce

      public <R> Optional<R> reduce(BinaryOperator<R> op, BiFunction<? super JsPath,? super JsPrimitive,R> map, BiPredicate<? super JsPath,? super JsPrimitive> predicate)
      Description copied from interface: Json
      Performs a reduction on the values of this json that satisfy the predicate. The reduction is performed mapping each value with the mapping function and then applying the operator
      Specified by:
      reduce in interface Json<JsArray>
      Type Parameters:
      R - the type of the operands of the operator
      Parameters:
      op - the operator upon two objects of type R
      map - the mapping function which produces an object of type R from a JsValue
      predicate - the predicate that determines what JsValue will be mapped and reduced
      Returns:
      an Optional describing the result of the reduction
    • reduce

      public <R> Optional<R> reduce(BinaryOperator<R> op, Function<? super JsPrimitive,R> map, Predicate<? super JsPrimitive> predicate)
      Description copied from interface: Json
      Performs a reduction on the values of this json that satisfy the predicate. The reduction is performed mapping each value with the mapping function and then applying the operator
      Specified by:
      reduce in interface Json<JsArray>
      Type Parameters:
      R - the type of the operands of the operator
      Parameters:
      op - the operator upon two objects of type R
      map - the mapping function which produces an object of type R from a JsValue
      predicate - the predicate that determines what JsValue will be mapped and reduced
      Returns:
      an Optional describing the result of the reduction
    • delete

      public JsArray delete(JsPath path)
      Description copied from interface: Json
      Removes the element in this json located at the given path, if it exists, returning the same this instance otherwise
      Specified by:
      delete in interface Json<JsArray>
      Parameters:
      path - the given JsPath object
      Returns:
      a json of the same type T
    • size

      public int size()
      Description copied from interface: Json
      Returns the number of elements in the first level of this json
      Specified by:
      size in interface Json<JsArray>
      Returns:
      the number of elements in the first level of this json
    • stream

      public Stream<JsPair> stream()
      Description copied from interface: Json
      Returns a stream over all the pairs of elements in this json object.
      Specified by:
      stream in interface Json<JsArray>
      Returns:
      a Stream over all the JsPairs in this json
    • streamOfValues

      public Stream<JsValue> streamOfValues()
      Returns the values of the array as a stream
      Returns:
      an stream of values
    • get

      public JsValue get(int i)
      returns the element located at the specified index or JsNothing if it doesn't exist. It never throws an exception, it's a total function.
      Parameters:
      i - the index
      Returns:
      a JsValue
    • hashCode

      public int hashCode()
      equals method is inherited, so it's implemented. The purpose of this method is to cache the hashcode once calculated. the object is immutable and it won't change Single-check idiom Item 83 from Effective Java
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object that)
      Overrides:
      equals in class Object
    • toString

      public String toString()
      // Single-check idiom Item 83 from effective java
      Overrides:
      toString in class Object
    • head

      public JsValue head()
      Returns the first element of this array.
      Returns:
      the first JsValue of this JsArray
      Throws:
      UserError - if this JsArray is empty
    • tail

      public JsArray tail()
      Returns a json array consisting of all elements of this array except the first one.
      Returns:
      a JsArray consisting of all the elements of this JsArray except the head
      Throws:
      UserError - if this JsArray is empty.
    • init

      public JsArray init()
      Returns all the elements of this array except the last one.
      Returns:
      JsArray with all the JsValue except the last one
      Throws:
      UserError - if this JsArray is empty
    • intersection

      public JsArray intersection(JsArray that, JsArray.TYPE ARRAY_AS)
      this.union(that, SET) returns this plus those elements from that that don't exist in this. this.union(that, MULTISET) returns this plus those elements from that appended to the back. this.union(that, LIST) returns this plus those elements from that which position is >= this.size(). For those elements that are containers of the same type and are located at the same position, the result is their intersection. So this operation is kind of a recursive intersection
      Specified by:
      intersection in interface Json<JsArray>
      Parameters:
      that - the other array
      Returns:
      a JsArray of the same type as the inputs
    • isArray

      public boolean isArray()
      Description copied from interface: JsValue
      Returns true if this JsValue is a JsArray
      Specified by:
      isArray in interface JsValue
      Returns:
      true if this JsValue is a JsArray
    • iterator

      public Iterator<JsValue> iterator()
      Specified by:
      iterator in interface Iterable<JsValue>
    • last

      public JsValue last()
      Returns the last element of this array.
      Returns:
      the last JsValue of this JsArray
      Throws:
      UserError - if this JsArray is empty
    • prepend

      public JsArray prepend(JsValue e, JsValue... others)
      Adds one or more elements, starting from the last, to the front of this array.
      Parameters:
      e - the JsValue to be added to the front.
      others - more optional JsValue to be added to the front
      Returns:
      a new JsArray
    • prependAll

      public JsArray prependAll(JsArray array)
      Adds all the elements of the array, starting from the last, to the front of this array.
      Parameters:
      array - the JsArray of elements to be added to the front
      Returns:
      a new JsArray
    • delete

      public JsArray delete(int index)
    • union

      public JsArray union(JsArray that, JsArray.TYPE ARRAY_AS)
      returns this plus those elements from that which position is >= this.size(), and, at the positions where a container of the same type exists in both this and that, the result is their union. This operations doesn't make any sense if arrays are not considered lists, because there is no notion of order.
      Specified by:
      union in interface Json<JsArray>
      Parameters:
      that - the other array
      Returns:
      a new JsArray of the same type as the inputs