@@ -121,46 +121,54 @@ public void selectKeys(Collection<String> keys) {
121121
122122 public Map <String , Object > compileWhereOperationMap () {
123123 Map <String , Object > result = new HashMap <>();
124- where .forEach ((key , ops ) -> {
125- if (key .equals (JBQueryOperation .OR_OP )) {
124+
125+ // }
126+ // where.forEach((key, ops) -> {
127+ for (Map .Entry <String , List <JBQueryOperation >> entry : where .entrySet ()) {
128+ if (entry .getKey ().equals (JBQueryOperation .OR_OP )) {
126129 List <Object > opList = new ArrayList <>();
127- ops .forEach (op -> opList .add (op .toResult ()));
130+ for (JBQueryOperation op : entry .getValue ()) {
131+ opList .add (op .toResult ());
132+ }
128133 List <Object > existsOr = (List <Object >) result .get (JBQueryOperation .OR_OP );
129134 if (existsOr != null ) {
130135 existsOr .addAll (opList );
131136 } else {
132137 result .put (JBQueryOperation .OR_OP , opList );
133138 }
134- } else if (key .equals (JBQueryOperation .AND_OP )) {
139+ } else if (entry . getKey () .equals (JBQueryOperation .AND_OP )) {
135140 List <Object > opList = new ArrayList <>();
136- ops .forEach (op -> opList .add (op .getValue ()));
141+ for (JBQueryOperation op : entry .getValue ()) {
142+ opList .add (op .getValue ());
143+ }
137144 List <Object > existsAnd = (List <Object >) result .get (JBQueryOperation .AND_OP );
138145 if (existsAnd != null ) {
139146 existsAnd .addAll (opList );
140147 } else {
141148 result .put (JBQueryOperation .AND_OP , opList );
142149 }
143150 } else {
144- switch (ops .size ()) {
151+ switch (entry . getValue () .size ()) {
145152 case 0 :
146153 break ;
147154 case 1 :
148- ops .forEach (op -> result .put (key , op .toResult ()));
155+ for (JBQueryOperation op : entry .getValue ()) {
156+ result .put (entry .getKey (), op .toResult ());
157+ }
149158 break ;
150159 default :
151160 List <Object > opList = new ArrayList <>();
152161 Map <String , Object > opMap = new HashMap <>();
153162 final boolean [] hasEqual = {false };
154- ops . forEach ( op -> {
155- opList .add (op .toResult (key ));
163+ for ( JBQueryOperation op : entry . getValue ()) {
164+ opList .add (op .toResult (entry . getKey () ));
156165 if (JBQueryOperation .EQUAL_OP .equals (op .getOp ())) {
157166 hasEqual [0 ] = true ;
158167 }
159168 if (!hasEqual [0 ]) {
160169 opMap .putAll ((Map <? extends String , ?>) op .toResult ());
161170 }
162-
163- });
171+ }
164172 if (hasEqual [0 ]) {
165173 List <Object > existsAnd = (List <Object >) result .get (JBQueryOperation .AND_OP );
166174 if (existsAnd != null ) {
@@ -169,13 +177,13 @@ public Map<String, Object> compileWhereOperationMap() {
169177 result .put (JBQueryOperation .AND_OP , opList );
170178 }
171179 } else {
172- result .put (key , opMap );
180+ result .put (entry . getKey () , opMap );
173181 }
174182 break ;
175183
176184 }
177185 }
178- });
186+ }
179187 return result ;
180188 }
181189
@@ -193,21 +201,35 @@ public Map<String, String> assembleParameters() {
193201 parameters .put (ORDER , order );
194202 }
195203 if (include != null && include .size () > 0 ) {
196- parameters .put (INCLUDE , String . join ("," , include ));
204+ parameters .put (INCLUDE , join (include , "," ));
197205 }
198206 if (selectedKeys != null && selectedKeys .size () > 0 ) {
199- parameters .put (KEYS , String . join ("," , selectedKeys ));
207+ parameters .put (KEYS , join (new ArrayList <>( selectedKeys ), "," ));
200208 }
201209 return parameters ;
202210 }
203211
212+ private String join (List <String > list , String conjunction ) {
213+ StringBuilder sb = new StringBuilder ();
214+ boolean first = true ;
215+ for (String item : list )
216+ {
217+ if (first )
218+ first = false ;
219+ else
220+ sb .append (conjunction );
221+ sb .append (item );
222+ }
223+ return sb .toString ();
224+ }
225+
204226 public void addWhereItem (JBQueryOperation op ) {
205227 List <JBQueryOperation > ops = where .get (op .getKey ());
206228 if (ops == null ) {
207229 ops = new LinkedList <>();
208230 where .put (op .getKey (), ops );
209231 }
210- ops . removeIf ( operation -> operation . sameOp ( op ) );
232+ removeSameOperation ( ops , op );
211233 ops .add (op );
212234 }
213235
@@ -221,7 +243,7 @@ public void addOrItems(JBQueryOperation op) {
221243 ops = new LinkedList <>();
222244 where .put (JBQueryOperation .OR_OP , ops );
223245 }
224- ops . removeIf ( operation -> operation . sameOp ( op ) );
246+ removeSameOperation ( ops , op );
225247 ops .add (op );
226248 }
227249
@@ -233,10 +255,20 @@ public void addAndItems(JBQueryConditions conditions) {
233255 ops = new LinkedList <>();
234256 where .put (JBQueryOperation .AND_OP , ops );
235257 }
236- ops . removeIf ( operation -> operation . sameOp ( op ) );
258+ removeSameOperation ( ops , op );
237259 ops .add (op );
238260 }
239261
262+ private void removeSameOperation (List <JBQueryOperation > ops , JBQueryOperation op ) {
263+ Iterator <JBQueryOperation > iterator = ops .iterator ();
264+ while (iterator .hasNext ()) {
265+ JBQueryOperation operation = iterator .next ();
266+ if (operation .sameOp (op )) {
267+ iterator .remove ();
268+ }
269+ }
270+ }
271+
240272 public void whereEqualTo (String key , Object value ) {
241273 if (value instanceof JBObject ) {
242274 addWhereItem (key , JBQueryOperation .EQUAL_OP , ((JBObject ) value ).getPointer ());
0 commit comments