parameters for if - Python-like list comprehension in Java

3 Answers

In Java 8 you can use method references:

List<String> list = ...;

Or, if you want to create a new list instance:

List<String> upper =;
return tutorial append

Since Java doesn't allow passing methods as parameters, what trick do you use to implement Python like list comprehension in Java ?

I have a list (ArrayList) of Strings. I need to transform each element by using a function so that I get another list. I have several functions which take a String as input and return another String as output. How do I make a generic method which can be given the list and the function as parameters so that I can get a list back with each element processed. It is not possible in the literal sense, but what trick should I use ?

The other option is to write a new function for each smaller String-processing function which simply loops over the entire list, which is kinda not so cool.

You can use lambdas for the function, like so:

class Comprehension<T> {
    *in: List int
    *func: Function to do to each entry
    public List<T> comp(List<T> in, Function<T, T> func) {
        List<T> out = new ArrayList<T>();
        for(T o: in) {
        return out;

the usage:

List<String> stuff = new ArrayList<String>();
List<String> newStuff = new Comprehension<String>().comp(stuff, (a) -> { //The <String> tells the comprehension to return an ArrayList<String>
    a.equals("a")? "1": 
            (a.equals("b")? "2": 
                (a.equals("c")? "3":
                    (a.equals("d")? "4": a

will return:

["1", "2", "3", "4", "cheese"]