Who needs libraries for non-destructive programming in java?
You can just use an interface for a list of T (ILoT), a representation of an empty list (MtLoT), and a ConsLoT which has a first (which is of the type T) and a rest (which is of the type ILoT).
Bam, you've got a list implementation ( new ConsLoT(new T(arg1, arg2, argN), new ConsLoT(new T(argA, argB, argN), new MtLoT)); ).
Lists are a major part of functional programming, you could use arraylists and just make a new one every time you need to "change" data, but they're essentially lists (just not as clear).