I have two lists with the same number of arguments, and I'd like an *elegant* way of **combining** them (not **concatenate**). 

Here is my current (not so good) way of doing it (just so you know what I am trying to do).

```
    List<Double> list1 = ... // init here
    List<Double> list2 = ... // init here
    Function<Double, Double, Double> myFunc = ... // init here

    List<Double> ret = new ArrayList<Double>(size);

    for (int n = 0; n < size; ++n)
    {
        ret.add(func.apply(list1.get(n),
                           list2.get(n)));
    }
    return ret;

interface Function <X, Y, Z>
{
    Z apply(X arg1, Y arg2);
}

```

Is there some existing helpers that would allow me to do something like:

```
Lists.combine(list1, list2, myFunction);

```

For instance, suppose I have two list of integers, and I have the function `f(x, y) = x * y)`

I want the resulting list to be a list of `(x[i] * y[i])`

Concretely, 

```
list1 = {1, 2, 3, 4}
list2 = {2, 3, 4, 4}

result = {2, 6, 12, 15}

```

Thanks