Отфильтруйте определенные столбцы из строки, разделенной трубами, используя потоковый API или лямбду - PullRequest
2 голосов
/ 01 декабря 2019

Предположим, у меня есть строка / объект, имеющий некоторые данные в формате с разделением по конвейеру, как показано ниже

***Input:***
TIMESTAMP|COUNTRYCODE|RESPONSETIME|FLAG
1544190995|US|500|Y
1723922044|GB|370|N
1711557214|US|750|Y

Я хочу прочитать эту строку / объект и отфильтровать данные на основе имен определенных столбцов (например, TIMESTAMP). и ФЛАГ). И вернуть / отобразить вывод, как показано ниже -

***Output:***
TIMESTAMP|FLAG
1544190995|Y
1723922044|N
1711557214|Y

Я попытался использовать следующий код:

  1. Сначала мне потребовались имена заголовков, которые сохранили массив:

    headerArray[] = {TIMESTAMP, FLAG}
    
  2. Сравнивая headerArray[] с первой строкой ввода, я получил индекс указанного заголовка столбца на входе:

    headerIndex[] = {0, 3}
    
  3. Тогдапопытался использовать приведенный ниже код для фильтрации и получения указанных столбцов и значений:

    return br.lines()
            .skip(1) // skip headers
            .map(s -> s.split("|"))
            .filter(a -> a[0] && a[3])
            .collect(Collectors.toList());
    

Примечание. У меня более миллиона строк значений, разделенных конвейерами. И я хочу вернуть все отфильтрованные значения столбца в одном объекте. Я полагаю, что это невозможно, возвращая значение в виде списка.

...