В примерах matplotlib.org ( http://matplotlib.org/examples/pylab_examples/finance_work2.html ) показан один хороший пример функции экспоненциального скользящего среднего (EMA) с использованием numpy:
def moving_average(x, n, type):
x = np.asarray(x)
if type=='simple':
weights = np.ones(n)
else:
weights = np.exp(np.linspace(-1., 0., n))
weights /= weights.sum()
a = np.convolve(x, weights, mode='full')[:len(x)]
a[:n] = a[n]
return a
Мы можем использовать flatmap для этого, относитесь ниже кода:
List<Integer> i1= Arrays.asList(1, 2, 3, 4);
List<Integer> i2= Arrays.asList(5, 6, 7, 8);
List<List<Integer>> ii= Arrays.asList(i1, i2);
System.out.println("List<List<Integer>>"+ii);
List<Integer> flat=ii.stream().flatMap(l-> l.stream()).collect(Collectors.toList());
System.out.println("Flattened to List<Integer>"+flat);
Расширение на ответе Eran, который был главным ответом, если у Вас есть набор слоев списков, можно сохранить flatmapping ими.
Это также идет с удобным способом отфильтровать, поскольку Вы спускаетесь по слоям в случае необходимости также.
Так, например:
List<List<List<List<List<List<Object>>>>>> multiLayeredList = ...
List<Object> objectList = multiLayeredList
.stream()
.flatmap(someList1 -> someList1
.stream()
.filter(...Optional...))
.flatmap(someList2 -> someList2
.stream()
.filter(...Optional...))
.flatmap(someList3 -> someList3
.stream()
.filter(...Optional...))
...
.collect(Collectors.toList())
Это, было бы подобно в SQL наличию операторов SELECT в операторах SELECT.