In the following test case you can see them in action :
@Test
public void testLiveViews() {
/** adding 9 arrays with 0,1,2,3,4,5,6,7,8 */
List<Integer[]> list = new ArrayList<Integer[]>(9);
for (int i = 0; i < 9; i++) {
list.add(new Integer[]{i});
}
/** filtering arrays to even values 0,2,4,6,8 */
Collection<Integer[]> filteredList = Collections2.filter(list, new Predicate<Integer[]>() {
public boolean apply(Integer[] input) {
return input[0] % 2 == 0;
}
});
Assert.assertEquals(9, list.size());
Assert.assertEquals(5, filteredList.size());
/** filtered live view reflects changes into the underlying collection */
Assert.assertEquals((int) list.get(2)[0], 2);
for (Integer[] s : filteredList) {
s[0] = s[0] + 1;
}
Assert.assertEquals((int) list.get(2)[0], 3);
/** elements changed so that they don't satisfy filtering condition hence size is 0 */
Assert.assertEquals(0, filteredList.size());
Assert.assertEquals(9, list.size());
/** adding even value that satisfy condition to filtered list */
filteredList.add(new Integer[]{666});
Assert.assertEquals(1, filteredList.size());
Assert.assertEquals(10, list.size());
/** adding even value that satisfy condition to underlying list */
list.add(new Integer[]{888});
Assert.assertEquals(2, filteredList.size());
Assert.assertEquals(11, list.size());
/** adding odd value that doesn't satisfy condition to filtered list */
try {
filteredList.add(new Integer[]{667});
Assert.fail();
} catch (Exception e){
Assert.assertEquals(2, filteredList.size());
}
/** adding odd value that doesn't satisfy condition to underlying list */
list.add(new Integer[]{887});
Assert.assertEquals(2, filteredList.size());
Assert.assertEquals(12, list.size());
}
No comments:
Post a Comment