Есть ли лучший способ писать с помощью Stream? - PullRequest
0 голосов
/ 21 апреля 2019
    public List<ArrayList<String>> removeRow(int columnIndex,Set<String> masterData,List<ArrayList<String>> rowColumnData){ 

        List<ArrayList<String>> finalData= new ArrayList<ArrayList<String>>();

        for(ArrayList<String> data: rowColumnData){
            String columnVal=data.get(columnIndex);
            if(masterData.contains(columnVal){
            finalData.add(data);
        }

        return finalData;
    }

Мне нужно отфильтровать строки, если определенный набор значений столбца не совпадает.Мои masterData содержит 30 000 записей.Мой rowColumnData будет содержать 2M записей, в основном строку, значения столбцов которой хранятся в списке массивов, а данные всей таблицы - List>.

Как с помощью API потока написать код, который мне дастлучшая производительность?

1 Ответ

0 голосов
/ 21 апреля 2019

Я не так хорош в уровне производительности при использовании потоков, но вы можете сделать это, используя parallelStream, когда несколько потоков обрабатывают данные, нужно знать некоторые интересные факты потоки Java 8: почему параллельный поток медленнее?

List<List<String>> result = rowColumnData
                            .parallelStream()
                            .filter(l->masterData.contains(l.get(columnIndex)))
                            .collect(Collectors.toList());

Но будьте в курсе

Список E get (int index) Броски:

IndexOutOfBoundsException - если индекс находится вне диапазона (index <0 || index> = size ())

Набор логических значений содержит (Объект o) Броски:

NullPointerException - если указанный элемент является нулем, и этот набор не разрешает нулевые элементы (необязательно)

...