I've never been big into functional programming, so my recent work with VAVR, which more and more seems like some kind of java port back from scala or haskell, has been very new and different for me. Some of the things I have seen have been really exciting -- flatMap and groupBy, for example, are very simple, straight-forward, and useful tools. And then there is folding. Foldable data structures ( here is another reference ). Geometrically, the concept of folding is straight forward, too. Imaging turning a page in a book -- this is folding the page over. It is a simple as that. Functionally speaking, however, things get a lot more interesting. If we start with a list: A B C D And then we fold that list in either direction, we don't visibly reflect, as folding is not quite the same as reflection. Instead, folding results in this list: D C B A Of course, this is a very simple example of folding because folding can become muc...