面试题答案
一键面试设计思路
- 逐行处理:从文件逐行读取数据,避免一次性将所有数据加载到内存中。
- 边读边过滤:在读取每一行数据时,立即使用正则表达式进行匹配,只保留满足条件的数据。
- 使用
limit
方法:一旦满足条件的数据达到1000条,立即停止处理,避免继续读取数据。
关键代码示例
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class LargeDataStreamProcessor {
public static void main(String[] args) {
String filePath = "your_large_file.txt";
String regex = "your_regex_pattern";
try (BufferedReader br = new BufferedReader(new FileReader(filePath));
Stream<String> stream = br.lines()) {
stream.filter(line -> line.matches(regex))
.limit(1000)
.collect(Collectors.toList())
.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
在上述代码中:
- 使用
BufferedReader
逐行读取文件,br.lines()
将文件内容转换为Stream<String>
。 filter
方法用于过滤满足正则表达式条件的行。limit
方法确保只处理前1000条满足条件的数据。- 最后使用
collect(Collectors.toList())
将结果收集到List
中,并使用forEach
进行输出。这样在处理大数据流时,可以有效避免内存溢出问题并提高处理效率。