Как я могу превратить список списков в список в Java 8?

В примерах 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

426
задан Michael 28 February 2018 в 10:22
поделиться

2 ответа

Мы можем использовать 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);
0
ответ дан 22 November 2019 в 22:55
поделиться

Расширение на ответе 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.

0
ответ дан 22 November 2019 в 22:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: