在本文中,我将向您展示如何在标准Java映射上有效地实现Speedment Open Source流,并将Stream接口扩展为MapStream! 即使在复杂的情况下,此添加将使保持流的具体性和可读性变得更加容易。 希望这将允许您继续流式传输而不会过早收集结果。

Java 8中最大的功能之一就是能够流化对象集合。 通过将.stream()方法添加到Collection接口中,使用此新功能突然扩展了Java语言中的每个集合。 其他数据结构(例如Map-interface)不会实现该方法,因为它们并不是严格意义上的集合。

MapStream将使用两个类型参数,一个键和一个值。 通过指定Map.Entry <K,V>作为类型参数,它还将扩展标准Stream接口。 这将允许我们直接从任何Java映射构造MapStream。

public interface MapStream<K, V> extends Stream<Map.Entry<K, V>> {...
}

多态性的概念告诉我们,只要新的返回类型是旧的返回类型的更具体的实现,子组件就可以更改覆盖方法的返回类型。 我们将在定义MapStream接口时使用它,以便对于每个链接操作,都返回MapStream而不是Stream。

public interface MapStream<K, V> extends Stream<Map.Entry<K, V>> {@Override MapStream<K, V> filter(Predicate<? super Map.Entry<K, V>> predicate);@Override MapStream<K, V> distinct();@OverrideMapStream<K, V> sorted(Comparator<? super Map.Entry<K, V>> comparator);...
}

某些操作仍将需要返回普通Stream。 如果操作更改了流元素的类型,则我们无法确保新类型将是Map.Entry。 但是,我们可以添加其他方法以在具有键-值对的类型之间进行映射。

@Override<R> Stream<R> map(Function<? super Map.Entry<K, V>, ? extends R> mapper);<R> Stream<R> map(BiFunction<? super K, ? super V, ? extends R> mapper);

除了允许用户从条目映射到其他内容的功能外,他(她)还可以从键值对映射到其他内容。 当然,这很方便,但是由于我们正在使用值对,因此我们还可以添加更多特定的映射操作。

<R> MapStream<R, V> mapKey(BiFunction<? super K, ? super V, ? extends R> mapper);<R> MapStream<K, R> mapValue(BiFunction<? super K, ? super V, ? extends R> mapper);

看起来差别不大,但是使用API​​时,差别显而易见:

// With MapsStream
final Map<String, List<Long>> map = ...;
MapStream.of(map).mapKey((k, v) -> k + " (" + v.size() + ")").flatMapValue((k, v) -> v.stream()).map((k, v) -> k + " >> " + v).collect(System.out::println);// Without MapStream
final Map<String, List<Long>> map = ...;
map.entrySet().stream().map(e -> new AbstractMap.SimpleEntry<>(e.getKey() + " (" + e.getValue().size() + ")"),e.getValue())).flatMap(e -> e.getValue().stream().map(v -> new AbstractMap.SimpleEntry<>(e.getKey(), v))).map(e -> e.getKey() + " >> " + e.getValue()).collect(System.out::println);
  • 可以在此处找到 MapStream的完整实现。 如果您对更酷的东西感兴趣,请查看Speedment Github页面 。 玩得开心!

翻译自: https://www.javacodegeeks.com/2016/02/streaming-maps-java-8.html

使用Java 8在地图上流式传输相关推荐

  1. java流式传输对象_使用Java 8在地图上流式传输

    java流式传输对象 在本文中,我将向您展示如何在标准Java映射上有效地实现Speedment Open Source流,并将Stream接口扩展为MapStream! 即使在复杂的情况下,此添加将 ...

  2. java用NIO实现文件传输_Java Nio 实现文件的传输

    使用Java Nio实现文件的传输 1.ServerSocket.java package ch2; import java.io.File; import java.io.FileNotFoundE ...

  3. 百度地图 截图java_[Java教程]百度地图API 简单使用

    [Java教程]百度地图API 简单使用 0 2015-08-24 19:00:12 最近项目上需要用到百度地图进行导航,参考百度地图API完成一个例子.API地址:http://developer. ...

  4. java scp发送文件到服务器,Java实现往远程服务器传输文件

    Java实现往远程服务器传输文件 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei ...

  5. Java多线程socket网络协议传输

    Java和大数据系列 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等 ...

  6. java腾讯地图根据经纬度获取具体位置

    腾讯地图 java腾讯地图根据经纬度获取具体位置 java腾讯地图根据经纬度获取具体位置 package com.fengdi.lianmeng.util.tencent;import com.fen ...

  7. java打怪升级地图

    文章目录 前言 一.java打怪升级地图 1.java基础 2.数据库 3.编程强化 4.软件项目管理 5.热门技术框架 6.分布式架构 7.服务器中间件 8.服务器技术 9.容器技术 10.业务解决 ...

  8. Java从高德地图获取全国地铁站数据

    Java从高德地图获取全国地铁站数据. 数据来源(高德地图):http://map.amap.com/subway/index.html?&4401 采集代码 /*** 从高德地图地铁线路同步 ...

  9. Java调用高德地图API根据详细地址获取经纬度

    Java调用高德地图API根据详细地址获取经纬度 官方API:https://lbs.amap.com/api/webservice/guide/api/georegeo * Web服务API 地理/ ...

最新文章

  1. Python中的 __name__属性的含义和作用
  2. Maven多模块项目使用MyBatis Generator
  3. 理解与使用Javascript中的回调函数
  4. 牛逼!Docker遇到Intellij IDEA,再次解放了生产力~
  5. haproxy服务启动命令_HaProxy安装和常用命令
  6. 关于父窗口获取跨域iframe子窗口中的元素
  7. VTK:PolyData之ContourToImageData
  8. VB打开资源管理器并指定文件
  9. 2011年1月28日早会资料「招き猫」(汉语版)
  10. js 判断浏览器是否滚动到底部
  11. python plt引用_先引用matplotlib.pyplot再引用tensorflow报错问题
  12. X-Pacific / Elasticsearch-ESClientRHL
  13. 华硕服务器主板装系统,装机高手教你华硕主板bios设置图解
  14. 秀米怎么添加pdf附件「教程」
  15. 元分析 | 大脑同伦共激活的性别差异
  16. 蚪侠-远程泛目录[泛域名+泛目录+泛内页]-[代码+汉字]干扰-字体繁简切换-蜘蛛欺骗-主动推送_模板版-V25版
  17. 如何使用UUP来下载Windows 10 的安装镜像(Windows篇)
  18. GoJS v2.2.7 去水印
  19. Mock 模拟测试简介及 Mockito 使用入门
  20. [CryptoHack] RSA-PRIMES PART1 Write-Up

热门文章

  1. 软件开发的微信公众号分享
  2. Js对象如何添加方法、查看Api
  3. publiccms实现遍历多级分类下的不同样式内容
  4. Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
  5. JS对象的属性名规则
  6. 2019蓝桥杯省赛---java---B---7(外卖店优先级)
  7. Linux中打包和解压到的方法
  8. php移动代码,移动专区周级收录如何提交 复制这段php代码即可
  9. c语言程序设计班档案管理系统报告,C语言班级档案管理系统
  10. HDU1576(欧几里得算法)