当前位置: 首页 > news >正文

java8-模拟hadoop

hadoop的入门程序,java8也能实现

txt统计单词数量程序

@Test
public void fileWordCount() throws IOException {
    //特殊文件需要格式转换为txt
    Files.readAllLines(Paths.get("D:\\jd.txt"), StandardCharsets.UTF_8).parallelStream()
            //将多个流融合为一个
            .flatMap(line -> Arrays.stream(line.trim().split("\\s")))
            .filter(word -> word.length() > 0)
            .map(word -> new AbstractMap.SimpleEntry<>(word, 1))
            .collect(groupingBy(AbstractMap.SimpleEntry :: getKey, counting()))
            .entrySet().forEach(System.out :: println);
}

List统计单词数量程序

@Test
public void listWordCount(){
    List<String> stringList = Arrays.asList("a","b","c","a");
    stringList.stream()
            .map(s -> new AbstractMap.SimpleEntry<>(s, 1))
            .collect(groupingBy(AbstractMap.SimpleEntry :: getKey, counting()))
            .entrySet().stream()
            .forEach(System.out :: println);
    System.out.println("---------------------------------------------------");
    //通过自定义reduce统计,其实counting()也使用的是reduce
    //记住:凡是在中间操作使用了map,接口定义都需要声明出来,直接使用lambda表达式会有1.无法读取method,2.类型检查不到 的问题
    BinaryOperator<Integer> binaryOperator2 = Integer::sum;
    //排序的转换规则接口
    ToIntFunction<Map.Entry> sortMapFunction = (Map.Entry se) -> Integer.valueOf(se.getValue().toString()).intValue();
    stringList
            .stream()
            .map(s -> new AbstractMap.SimpleEntry<>(s, 1))
            .collect(groupingBy(AbstractMap.SimpleEntry::getKey,
                    reducing(0, AbstractMap.SimpleEntry::getValue,binaryOperator2)))
            .entrySet()
            .stream()
            .sorted(Comparator.comparingInt(sortMapFunction))
            .forEach(System.out::println);
}

相关文章:

  • 第 13 章 Barman for PostgreSQL
  • spark 源码编译 standalone 模式部署
  • 在华为设备上实施GRE隧道和IPSEC ***
  • 如何在数据库动态建表
  • 十年阿里java架构师的六大设计原则和项目经验
  • 基于 python + WebDriverAgent 的“跳一跳”小程序高分教程
  • json logstash 解析失败 ctrl-code 1
  • 5-2 equal getClass or instanceOf
  • linux kernel编译配置相关
  • 不要在构造函数中抛出异常
  • 老男孩教育教您批量建立nagios配置文件的方法
  • 使用jQuery获取session中存储的list集合
  • 如何理解接口-Java系列
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Linux下的文件I/O编程
  • [译]前端离线指南(上)
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • co.js - 让异步代码同步化
  • Java程序员幽默爆笑锦集
  • Laravel 实践之路: 数据库迁移与数据填充
  • leetcode-27. Remove Element
  • MD5加密原理解析及OC版原理实现
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Python学习之路16-使用API
  • React Transition Group -- Transition 组件
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 来,膜拜下android roadmap,强大的执行力
  • 前嗅ForeSpider教程:创建模板
  • 前嗅ForeSpider中数据浏览界面介绍
  • 少走弯路,给Java 1~5 年程序员的建议
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #includecmath
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (4.10~4.16)
  • (分布式缓存)Redis分片集群
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (正则)提取页面里的img标签
  • (转)Google的Objective-C编码规范
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net网站发布-允许更新此预编译站点
  • @Validated和@Valid校验参数区别
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [2010-8-30]
  • [20180224]expdp query 写法问题.txt
  • [Android]竖直滑动选择器WheelView的实现
  • [AR Foundation] 人脸检测的流程