当前位置: 首页 > 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编程
  • 分享一款快速APP功能测试工具
  • css系列之关于字体的事
  • Docker下部署自己的LNMP工作环境
  • Iterator 和 for...of 循环
  • Meteor的表单提交:Form
  • mysql 数据库四种事务隔离级别
  • Solarized Scheme
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 关于 Cirru Editor 存储格式
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何使用 JavaScript 解析 URL
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 实战|智能家居行业移动应用性能分析
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 自制字幕遮挡器
  • C# - 为值类型重定义相等性
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​linux启动进程的方式
  • #mysql 8.0 踩坑日记
  • %check_box% in rails :coditions={:has_many , :through}
  • (1)(1.13) SiK无线电高级配置(六)
  • (23)Linux的软硬连接
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (二开)Flink 修改源码拓展 SQL 语法
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (一) springboot详细介绍
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .Net 应用中使用dot trace进行性能诊断
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .net6使用Sejil可视化日志
  • .NET建议使用的大小写命名原则
  • .NET委托:一个关于C#的睡前故事
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • [codeforces]Recover the String