On Monday evening, I did a bit of Ruby hacking. On Tuesday morning, I arrived at work and my first task involved iterating through a list, and doing something to each of its elements. My fingers were already typing list.each, and I had to wrench my brain from my Ruby mindset back to the Java Way.
Some time later in the day, I read Philip Greenspun's much-linked Java-is-an-SUV flame.
Problem: I have a list of objects. I want to create another list containing the ‘id’ property of those objects.
Solutions:1
- Ruby
list.map { |i| i.id }- Perl
map { $_->id } @list;- Python
[x.id for x in list]- Common Lisp (Corrected by Andreas)
(mapcar #'id list)- Smalltalk (from James)
list collect: [:each | each id]-
- OGNL (from Jason)
list.{id}- Java
List ids = new ArrayList(); for (Iterator i = list.iterator(); i.hasNext(); ) { ids.add(new Long(((Thingy)i.next()).getId())); }- Java w/ 1.5-style Generics/For Loop/Autoboxing
List<Long> ids = new ArrayList<Long>(); for (Thingy x :list) ids.add(x.getId());
Collection ids = CollectionUtils.collect(
x, new Transformer() {
public Object transform( Object thingy ) {
return ((Thingy)thingy).getId();
}
});1 I was too lazy to test that they work, but the syntax is close enough. Bug reports to /dev/null.