[ https://issues.apache.org/jira/browse/JEXL-151?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14642859#comment-14642859 ]
Henri Biestro edited comment on JEXL-151 at 7/28/15 6:46 AM: ------------------------------------------------------------- After JEXL-170 has been implemented it is straight-forward to implement the required functionality by extending JexlArithmetic. If you feel it has any sence to others you may include the code below in base implementaion: {code} public Collection<Object> selfAdd(Collection<Object> c, Object x) { if (x != null && c != null) { if (x instanceof Collection<?>) { c.addAll((Collection<?>)x); } else if (x.getClass().isArray()) { for (int i = 0; i < Array.getLength(x); i++) { Object key = Array.get(x, i); c.add(key); } } else { c.add(x); } } return c; } public Collection<Object> selfSubtract(Collection<Object> c, Object x) { if (x != null && c != null) { if (x instanceof Collection) { c.removeAll((Collection<?>)x); } else if (x.getClass().isArray()) { for (int i = 0; i < Array.getLength(x); i++) { Object key = Array.get(x, i); c.remove(key); } } else { c.remove(x); } } return c; } public Collection<Object> selfMultiply(Collection<Object> c, Object x) { if (x != null && c != null) { if (x instanceof Collection<?>) { c.retainAll((Collection<?>) x); } else if (x.getClass().isArray()) { List<Object> list = new ArrayList<Object>(); for (int i = 0; i < Array.getLength(x); i++) { Object key = Array.get(x, i); list.add(key); } c.retainAll(list); } else { List<Object> list = new ArrayList<Object>(); list.add(x); c.retainAll(list); } } return c; } {code} was (Author: dmitri_blinov): After JEXL-170 has been implemented it is straight-forward to implement the required functionality by extending JexlArithmetic. If you feel it has any sence to others you may include the code below in base implementaion: {{{quote}{noformat} public Collection<Object> selfAdd(Collection<Object> c, Object x) { if (x != null && c != null) { if (x instanceof Collection<?>) { c.addAll((Collection<?>)x); } else if (x.getClass().isArray()) { for (int i = 0; i < Array.getLength(x); i++) { Object key = Array.get(x, i); c.add(key); } } else { c.add(x); } } return c; } public Collection<Object> selfSubtract(Collection<Object> c, Object x) { if (x != null && c != null) { if (x instanceof Collection) { c.removeAll((Collection<?>)x); } else if (x.getClass().isArray()) { for (int i = 0; i < Array.getLength(x); i++) { Object key = Array.get(x, i); c.remove(key); } } else { c.remove(x); } } return c; } public Collection<Object> selfMultiply(Collection<Object> c, Object x) { if (x != null && c != null) { if (x instanceof Collection<?>) { c.retainAll((Collection<?>) x); } else if (x.getClass().isArray()) { List<Object> list = new ArrayList<Object>(); for (int i = 0; i < Array.getLength(x); i++) { Object key = Array.get(x, i); list.add(key); } c.retainAll(list); } else { List<Object> list = new ArrayList<Object>(); list.add(x); c.retainAll(list); } } return c; } {noformat}{quote}}} > operators to manipulate j.u.Collection > -------------------------------------- > > Key: JEXL-151 > URL: https://issues.apache.org/jira/browse/JEXL-151 > Project: Commons JEXL > Issue Type: New Feature > Affects Versions: 3.0 > Reporter: Dmitri Blinov > Priority: Minor > Fix For: Later > > > New operators to add or remove collection items to/from Collection. Operators > can be named as += and -= respectively, or any other way. Operator += can be > mapped to Collection.addAll(Collection c) if right argument is Collection or > to Collection.add(Object o) otherwise. Operator -= can be mapped to > Collection.removeAll(Collection c) if right argument is Collection or to > Collection.remove(Object o) otherwise. Extend operators =~ (!~) to support > CollectionA =~ CollectionB usage, in which case it should map to > B.containsAll(A) operation. -- This message was sent by Atlassian JIRA (v6.3.4#6332)