@Override public void toData(DataOutput out) throws IOException { out.writeInt(this.size()); DataSerializer.writeObject(this.structType, out); for (Iterator i = this.iterator(); i.hasNext();) { DataSerializer.writeObject(i.next(), out); } }
public boolean retainAll(StructSet ss) { if (!this.structType.equals(ss.structType)) { if (isEmpty()) { return false; // nothing modified } else { clear(); return true; // nothing retained in receiver collection } } boolean changed = false; int size = size(); Iterator it; it = fieldValuesIterator(); while (size-- > 0) { Object[] vals = (Object[]) it.next(); if (!ss.containsFieldValues(vals)) { it.remove(); changed = true; } } return changed; }
@Test public void testIntersectionAndRetainAll() { String names[] = {"p", "pos"}; ObjectType types[] = {TypeUtils.OBJECT_TYPE, TypeUtils.OBJECT_TYPE}; StructTypeImpl sType = new StructTypeImpl(names, types); StructSet set1 = new StructSet(sType); Portfolio ptf = new Portfolio(0); Iterator pIter = ptf.positions.values().iterator(); while (pIter.hasNext()) { Object arr[] = {ptf, pIter.next()}; set1.addFieldValues(arr); } StructSet set2 = new StructSet(sType); pIter = ptf.positions.values().iterator(); while (pIter.hasNext()) { Object arr[] = {ptf, pIter.next()}; set2.addFieldValues(arr); } assertEquals(2, set1.size()); assertEquals(2, set2.size()); // tests that retainAll does not modify set1 assertTrue(!set1.retainAll(set2)); assertEquals(2, set1.size()); assertEquals(2, set2.size()); SelectResults sr = QueryUtils.intersection(set1, set2, null); assertEquals(2, sr.size()); } }