@@ -3,6 +3,7 @@ package ninja.sakib.jsonq.ext
3
3
import com.eclipsesource.json.Json
4
4
import com.eclipsesource.json.JsonArray
5
5
import com.eclipsesource.json.JsonValue
6
+ import ninja.sakib.jsonq.utils.*
6
7
7
8
/* *
8
9
* := Coded with love by Sakib Sami on 5/21/18.
@@ -14,39 +15,39 @@ import com.eclipsesource.json.JsonValue
14
15
fun JsonArray.whereGt (key : String , v : Any ): MutableList <Any > {
15
16
val res = mutableListOf<Any >()
16
17
this
17
- .filter { it -> it.isCountable(v, key, ninja.sakib.jsonq. GREATER ) }
18
+ .filter { it -> it.isCountable(v, key, GREATER ) }
18
19
.mapTo(res) { it -> it.asObject() }
19
20
return res
20
21
}
21
22
22
23
fun JsonArray.whereLt (key : String , v : Any ): MutableList <Any > {
23
24
val res = mutableListOf<Any >()
24
25
this
25
- .filter { it -> it.isCountable(v, key, ninja.sakib.jsonq. LESS ) }
26
+ .filter { it -> it.isCountable(v, key, LESS ) }
26
27
.mapTo(res) { it -> it.asObject() }
27
28
return res
28
29
}
29
30
30
31
fun JsonArray.whereLe (key : String , v : Any ): MutableList <Any > {
31
32
val res = mutableListOf<Any >()
32
33
this
33
- .filter { it -> it.isCountable(v, key, ninja.sakib.jsonq. LESS_EQ ) }
34
+ .filter { it -> it.isCountable(v, key, LESS_EQ ) }
34
35
.mapTo(res) { it -> it.asObject() }
35
36
return res
36
37
}
37
38
38
39
fun JsonArray.whereGe (key : String , v : Any ): MutableList <Any > {
39
40
val res = mutableListOf<Any >()
40
41
this
41
- .filter { it -> it.isCountable(v, key, ninja.sakib.jsonq. GREATER_EQ ) }
42
+ .filter { it -> it.isCountable(v, key, GREATER_EQ ) }
42
43
.mapTo(res) { it -> it.asObject() }
43
44
return res
44
45
}
45
46
46
47
fun JsonArray.whereEq (key : String , v : Any ): MutableList <Any > {
47
48
val res = mutableListOf<Any >()
48
49
this
49
- .filter { it -> it.isCountable(v, key, ninja.sakib.jsonq. EQ ) }
50
+ .filter { it -> it.isCountable(v, key, EQ ) }
50
51
.mapTo(res) { it -> it.asObject() }
51
52
return res
52
53
}
@@ -75,7 +76,7 @@ fun JsonArray.contains(key: String, v: Any): MutableList<Any> {
75
76
return res
76
77
}
77
78
78
- fun JsonArray.sum (): Double {
79
+ fun JsonArray.sum (key : String ): Double {
79
80
var sum = 0.0
80
81
this
81
82
.forEach { it ->
@@ -84,47 +85,66 @@ fun JsonArray.sum(): Double {
84
85
it.isLong() -> sum + = it.asLong()
85
86
it.isFloat() -> sum + = it.asFloat()
86
87
it.isDouble() -> sum + = it.asDouble()
88
+ it.isObject -> {
89
+ val nIt = it.asObject().get(key)
90
+ when {
91
+ nIt.isInt() -> sum + = nIt.asInt()
92
+ nIt.isLong() -> sum + = nIt.asLong()
93
+ nIt.isFloat() -> sum + = nIt.asFloat()
94
+ nIt.isDouble() -> sum + = nIt.asDouble()
95
+ }
96
+ }
87
97
}
88
98
}
89
99
return sum
90
100
}
91
101
92
- fun JsonArray.min (): JsonValue {
93
- if (this .size() == 0 )
94
- return Json .value(0 )
95
- var min = this [0 ]
96
- for (v in this ) {
97
- if (v.isInt() && min.isInt() && v.asInt() < min.asInt()) {
98
- min = v
99
- } else if (v.isLong() && min.isLong() && v.asLong() < min.asLong()) {
100
- min = v
101
- } else if (v.isFloat() && min.isFloat() && v.asFloat() < min.asFloat()) {
102
- min = v
103
- } else if (v.isDouble() && min.isDouble() && v.asDouble() < min.asDouble()) {
104
- min = v
105
- }
106
- }
102
+ fun JsonArray.min (key : String ): JsonValue {
103
+ var min = Json .value(Double .MAX_VALUE )
104
+ this
105
+ .forEach { it ->
106
+ when {
107
+ it.isObject -> {
108
+ val nIt = it.asObject().get(key)
109
+ when {
110
+ nIt.isInt() && nIt.asInt() < min.asInt() -> min = nIt
111
+ nIt.isLong() && nIt.asLong() < min.asLong() -> min = nIt
112
+ nIt.isFloat() && nIt.asFloat() < min.asFloat() -> min = nIt
113
+ nIt.isDouble() && nIt.asDouble() < min.asDouble() -> min = nIt
114
+ }
115
+ }
116
+ it.isInt() && it.asInt() < min.asInt() -> min = it
117
+ it.isLong() && it.asLong() < min.asLong() -> min = it
118
+ it.isFloat() && it.asFloat() < min.asFloat() -> min = it
119
+ it.isDouble() && it.asDouble() < min.asDouble() -> min = it
120
+ }
121
+ }
107
122
return min
108
123
}
109
124
110
- fun JsonArray.max (): JsonValue {
111
- if (this .size() == 0 )
112
- return Json .value(0 )
113
- var max = this [this .size() - 1 ]
114
- for (v in this ) {
115
- if (v.isInt() && max.isInt() && v.asInt() > max.asInt()) {
116
- max = v
117
- } else if (v.isLong() && max.isLong() && v.asLong() > max.asLong()) {
118
- max = v
119
- } else if (v.isFloat() && max.isFloat() && v.asFloat() > max.asFloat()) {
120
- max = v
121
- } else if (v.isDouble() && max.isDouble() && v.asDouble() > max.asDouble()) {
122
- max = v
123
- }
124
- }
125
+ fun JsonArray.max (key : String ): JsonValue {
126
+ var max = Json .value(Double .MIN_VALUE )
127
+ this
128
+ .forEach { it ->
129
+ when {
130
+ it.isObject -> {
131
+ val nIt = it.asObject().get(key)
132
+ when {
133
+ nIt.isInt() && nIt.asInt() > max.asInt() -> max = nIt
134
+ nIt.isLong() && nIt.asLong() > max.asLong() -> max = nIt
135
+ nIt.isFloat() && nIt.asFloat() > max.asFloat() -> max = nIt
136
+ nIt.isDouble() && nIt.asDouble() > max.asDouble() -> max = nIt
137
+ }
138
+ }
139
+ it.isInt() && it.asInt() > max.asInt() -> max = it
140
+ it.isLong() && it.asLong() > max.asLong() -> max = it
141
+ it.isFloat() && it.asFloat() > max.asFloat() -> max = it
142
+ it.isDouble() && it.asDouble() > max.asDouble() -> max = it
143
+ }
144
+ }
125
145
return max
126
146
}
127
147
128
- fun JsonArray.avg (): JsonValue {
129
- return Json .value(this .sum() / this .size())
148
+ fun JsonArray.avg (key : String ): JsonValue {
149
+ return Json .value(this .sum(key ) / this .size())
130
150
}
0 commit comments