lambdaj is a Java library that allows you to manipulate collections in a pseudo-functional and statically typed way. The main purpose of lambdaj is to partially eliminate the burden of writing (often nested and poorly readable) loops while iterating over collections. In particular, it allows you to iterate a collection in order to filter its items on a given condition, convert each item with a given rule, extract a given property from each item, sort the items on the values of one of their properties, group or index the items on the value of one or more properties, invoke a method on each item, or aggregate the items or the values of one of their properties. It allows all this without having to write a single explicit loop.
Immutable Collections for Java is a library providing immutable/persistent collection classes for Java. While collections are immutable, they provide methods for adding and removing values by creating new modified copies of themselves. Each copy shares almost all of its structure with other copies, to minimize memory consumption. The library includes a singly-linked (cons/cddr style) list/stack, an integer tree-based indexed list, a 2-3 tree-based random access indexed list, a 2-3 tree-based map, a hash tree-based map, and hash- and tree-based sets. All collections provide immutable Cursor as well as standard Iterator classes for looping through all elements. A utility class provides functional style algorithmic processing of Cursors, including foldLeft, foldRight, collect, select, and reject. The 2-3 tree and integer tree classes are optimized for performance and can be used alongside java.util Collections when immutability is needed for safe data sharing.