在Java中使用Lambda表达式统计词频
来源:互联网 发布:淘宝优惠提醒app 编辑:程序博客网 时间:2024/05/21 06:52
在Java中使用Lambda表达式统计词频
常规方法
使用Java进行词频统计的常规方法步骤如下:
1. 初始化一个map对象实例(用于保存单词以及它的出现次数)和一个变量fre(用于词频临时存放)2. 遍历每一个需要统计的单词,进行如下操作 a. 将fre赋值为1 b. 判断当前单词在map中是否存在 如果存在,则将fre加上该词在map中存入词频 c. 将当前单词与fre存入map
以上步骤的代码实现如下:
Map<String, Integer> map = new HashMap<>();int fre;for(String word : words) { fre = 1; if(map.containsKey(word)) fre += map.get(word); map.put(word, fre);}
使用Lambda表达式
在学习阅读State of the Lambda: Libraries Edition时,发现文中Collectors部分给出的最后一个代码实例存在一个小问题,即counting()方法返回的是长整型的数据类型Long,而Map却是使用Integer接收,显然是存在问题的。
文中的代码实例:
Pattern pattern = Pattern.compile(\\s+");Map<String, Integer> wordFreq = tracks.stream() .flatMap(t -> pattern.splitAsStream(t.name)) // Stream<String> .collect(groupingBy(s -> s.toUpperCase(), counting()));
而counting()方法的定义如下:
public static <T> Collector<T, ?, Long>counting() { return reducing(0L, e -> 1L, Long::sum);}
故而,需要使用自定义的counting()方法,如上,仅需要做如下修改即可:
Pattern pattern = Pattern.compile(\\s+");Map<String, Integer> wordFreq = tracks.stream() .flatMap(t -> pattern.splitAsStream(t.name)) // Stream<String> .collect(groupingBy(s -> s.toUpperCase(), Collectors.reducing(0, e -> 1, Integer::sum)));
假设所有需要统计的单词存于List数组中,那么使用该方法进行词频统计代码如下:
// List<String> list = new ArrayList<>();// list.add("aa a b A h z B");// list.add("a a b A h z B");// list.add("a a b A h z B");// list.add("a a b A h z B");Pattern pattern = Pattern.compile("\\s+");Map<String, Integer> wordFreq = list.stream() .flatMap(t -> pattern.splitAsStream(t)) .collect(groupingBy(s -> s, Collectors.reducing(0, e -> 1, Integer::sum)));
在集合(List)上调用stream()生成该集合元素的流视图,然后采用将一个返回流的函数传入flatMap(),这样会产生每个单词,最后将这些词进行统计存入Map中。
阅读全文
0 0
- 在Java中使用Lambda表达式统计词频
- 使用JAVA进行词频统计
- 在Android中使用Java 8的lambda表达式
- 在Java中使用Lambda表达式的技巧
- 在查询中使用 Lambda 表达式
- 在AndroidStudio中使用Lambda表达式
- 如何在AS中使用lambda表达式
- 在Android Studio中使用Lambda表达式
- 在Android Studio中使用Lambda表达式
- 在AndroidStudio中使用Lambda表达式
- 在AndroidStudio中使用Lambda表达式
- 在AS中使用lambda表达式
- 在Android Studio中使用Lambda表达式
- 在Android中使用Lambda表达式
- 在Android Studio中使用Lambda表达式
- Lambda FAQ_2.为什么在Java中加入Lambda表达式?
- Java中Lambda表达式的使用
- Java中Lambda表达式的使用
- Django Channels 实时在线用户列表
- WebRoot与WebContent区别
- Leetcode 113. Path Sum II
- 常用排序法(冒泡法,选择法)
- 给调皮的AssetBundle加上面向对象式加载调试管理
- 在Java中使用Lambda表达式统计词频
- @Autowired和@Resource的区别是什么?
- Java菜鸟第一天
- HCNA网络技术基础学习
- Mybatis关联、集合查询
- table View
- JavaScript 日期处理类库 Moment.js
- Git 忽略文件
- 利用信息资源提高创新能力·五