Here is the java implementation with lambda:

return Arrays.stream(Arrays.stream(costs).reduce((a, b) -> {
final int len = costs[0].length;
int[] now = new int[len];
for (int i = 0; i < len; i++) {
int tmp = a[i];
a[i] = Integer.MAX_VALUE;
now[i] = Arrays.stream(a).min().getAsInt() + b[i];
a[i] = tmp;
}
return now;
}).get()).min().getAsInt();

Or with AbacusUtil (A tool developed by me :-))

return N.min(N.reduce(costs, (a, b) -> {
final int len = costs[0].length;
int[] now = new int[len];
for (int i = 0; i < len; i++) {
int tmp = a[i];
a[i] = Integer.MAX_VALUE;
now[i] = N.min(a) + b[i];
a[i] = tmp;
}
return now;
}));