有没有更好的方法可以使用Stream编写?

问题描述 投票:0回答:1
    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编写能够提供更好性能的代码?

java java-8 java-stream
1个回答
0
投票

我在使用流时不是很擅长性能水平但是你可以通过使用parallelStream来实现这一点,其中多线程获取处理数据,需要知道一些有趣的事实Java 8's streams: why parallel stream is slower?

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

但请注意

List E get(int index)抛出:

IndexOutOfBoundsException - 如果索引超出范围(索引<0 || index> = size())

设置boolean contains(Object o)抛出:

NullPointerException - 如果指定的元素为null并且此set不允许null元素(可选)

© www.soinside.com 2019 - 2024. All rights reserved.