Re "data classes" example in this article - Common Lisp features I miss most in Java (besides macros):
- multiple return values - basically doing what the author is doing here, without introducing a new class for it,
- destructuring - assigning pieces of composite object into several variables (see e.g. destructuring-bind, or what pattern matching does in many languages).
Basically, I often find myself wanting to write this:
return {listWithResults, someBooleanFlag};
or return {listWithOneGroup, listWithOtherGroup};
and then use it like this: List<Foo> matchingResults;
List<Foo> nonMatchingResults;
boolean flag;
{matchingResults, nonMatchingResults, flag} = functionReturningMultipleValues();
or: Foo first;
Foo third;
List<Foo> rest;
{first, _, third | rest} = someList;
etc.