我可以使用Stream编写更好的方法吗?

时间:2019-04-21 15:42:21

标签: java java-8 java-stream

class App extends React.Component {
  state = {
    searchText: '',
  };

  getColumnSearchProps = (dataIndex) => ({
    filterDropdown: ({
      setSelectedKeys, selectedKeys, confirm, clearFilters,
    }) => (
      <div style={{ padding: 8 }}>
        <Input          
          placeholder={`Search ${dataIndex}`}
          value={selectedKeys[0]}
          onChange={e => setSelectedKeys(e.target.value ? [e.target.value] : [])}
          onPressEnter={() => this.handleSearch(selectedKeys, confirm)}              
        />
        <Button
          type="primary"
          onClick={() => this.handleSearch(selectedKeys, confirm)}
          icon="search"
        >
          Search
        </Button>            
      </div>
    ),

    // onFilter seems to only loop over root nodes
    onFilter: (value, record) => record[dataIndex].toString().toLowerCase().includes(value.toLowerCase()),    
    render: (text) => (
      <Highlighter
        ...
      />
    ),
  })     

  render() {
    const columns = [{
      title: 'Name',
      dataIndex: 'name',
      key: 'name',
      ...this.getColumnSearchProps('name'),
    }];
    return <Table columns={columns} dataSource={data} />;
  }
}

如果列的一组特定值不匹配,我需要过滤掉行。 我的masterData包含30,000条记录。 我的rowColumnData将保存2M条记录,基本上是一行,其列值存储在数组列表中,而整个表数据为List>。

如何使用流API编写可以提高性能的代码?

1 个答案:

答案 0 :(得分: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());

但是请注意

列表E get(int索引)抛出:

  

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

设置布尔包含(对象o)抛出:

  

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