List<Widget> filtered = filter(widgets, new Filter<Widget>() {
@Override public boolean keep(Widget w) {
return w.getColor() == RED;
}
});
List<Integer> weights = mapToInt(filtered, new Mapper<Widget, Integer>() {
@Override public Integer map(Widget w) {
return w.getWeight();
}
});
int sum = sum(weights);