使用IDEA开发WordCount程序有界流数据源 1.从元素中读取 2.从集合中读取 3.从文件中读取
时间: 2024-09-30 09:14:29 浏览: 27
如何使用IDEA工具开发一个WordCount单词计数程序?.docx
在IntelliJ IDEA中开发WordCount程序,处理有界流数据源通常涉及文本处理,可以采用以下几种方式来读取数据:
1. **从元素中读取**:如果数据是以数组或List形式存在,你可以直接通过遍历这些集合。例如,创建一个Java方法接收一个字符串列表,然后对每个字符串进行分词计数。
```java
public Map<String, Integer> countWords(List<String> elements) {
Map<String, Integer> wordCounts = new HashMap<>();
for (String element : elements) {
String[] words = element.split("\\s+");
for (String word : words) {
wordCounts.put(word, wordCounts.getOrDefault(word, 0) + 1);
}
}
return wordCounts;
}
```
2. **从集合中读取**:如果你的数据存储在一个可以迭代的集合,比如Java 8引入的Stream API,可以直接使用流式操作进行处理。
```java
import java.util.stream.Collectors;
Map<String, Long> countWords(Stream<String> stream) {
return stream.flatMapToInt(String::splitAsStream)
.map(word -> (word : "", 1L))
.collect(Collectors.groupingBy(Function.identity(), Collectors.summingLong(1)));
}
```
这会将每个单词映射到一个计数1的长整型键值对,然后按单词汇总计数。
3. **从文件中读取**:如果数据来自文件,可以使用`Files.lines()`方法逐行读取,配合流API处理。假设文件名是`input.txt`。
```java
Path filePath = Paths.get("input.txt");
try (Stream<String> lines = Files.lines(filePath)) {
// 使用类似上面的方法处理每一行
Map<String, Long> wordCounts = lines.map(line -> line.split("\\s+"))
.flatMapToInt(Stream::of)
.collect(Collectors.groupingBy(Function.identity(), Collectors.summingLong(1)));
} catch (IOException e) {
e.printStackTrace();
}
```
阅读全文