使用Java 8在地图上流式传输
在本文中,我将向您展示如何在标准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在地图上流式传输相关推荐
- java流式传输对象_使用Java 8在地图上流式传输
java流式传输对象 在本文中,我将向您展示如何在标准Java映射上有效地实现Speedment Open Source流,并将Stream接口扩展为MapStream! 即使在复杂的情况下,此添加将 ...
- java用NIO实现文件传输_Java Nio 实现文件的传输
使用Java Nio实现文件的传输 1.ServerSocket.java package ch2; import java.io.File; import java.io.FileNotFoundE ...
- 百度地图 截图java_[Java教程]百度地图API 简单使用
[Java教程]百度地图API 简单使用 0 2015-08-24 19:00:12 最近项目上需要用到百度地图进行导航,参考百度地图API完成一个例子.API地址:http://developer. ...
- java scp发送文件到服务器,Java实现往远程服务器传输文件
Java实现往远程服务器传输文件 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei ...
- Java多线程socket网络协议传输
Java和大数据系列 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等 ...
- java腾讯地图根据经纬度获取具体位置
腾讯地图 java腾讯地图根据经纬度获取具体位置 java腾讯地图根据经纬度获取具体位置 package com.fengdi.lianmeng.util.tencent;import com.fen ...
- java打怪升级地图
文章目录 前言 一.java打怪升级地图 1.java基础 2.数据库 3.编程强化 4.软件项目管理 5.热门技术框架 6.分布式架构 7.服务器中间件 8.服务器技术 9.容器技术 10.业务解决 ...
- Java从高德地图获取全国地铁站数据
Java从高德地图获取全国地铁站数据. 数据来源(高德地图):http://map.amap.com/subway/index.html?&4401 采集代码 /*** 从高德地图地铁线路同步 ...
- Java调用高德地图API根据详细地址获取经纬度
Java调用高德地图API根据详细地址获取经纬度 官方API:https://lbs.amap.com/api/webservice/guide/api/georegeo * Web服务API 地理/ ...
最新文章
- Python中的 __name__属性的含义和作用
- Maven多模块项目使用MyBatis Generator
- 理解与使用Javascript中的回调函数
- 牛逼!Docker遇到Intellij IDEA,再次解放了生产力~
- haproxy服务启动命令_HaProxy安装和常用命令
- 关于父窗口获取跨域iframe子窗口中的元素
- VTK:PolyData之ContourToImageData
- VB打开资源管理器并指定文件
- 2011年1月28日早会资料「招き猫」(汉语版)
- js 判断浏览器是否滚动到底部
- python plt引用_先引用matplotlib.pyplot再引用tensorflow报错问题
- X-Pacific / Elasticsearch-ESClientRHL
- 华硕服务器主板装系统,装机高手教你华硕主板bios设置图解
- 秀米怎么添加pdf附件「教程」
- 元分析 | 大脑同伦共激活的性别差异
- 蚪侠-远程泛目录[泛域名+泛目录+泛内页]-[代码+汉字]干扰-字体繁简切换-蜘蛛欺骗-主动推送_模板版-V25版
- 如何使用UUP来下载Windows 10 的安装镜像(Windows篇)
- GoJS v2.2.7 去水印
- Mock 模拟测试简介及 Mockito 使用入门
- [CryptoHack] RSA-PRIMES PART1 Write-Up
热门文章
- 软件开发的微信公众号分享
- Js对象如何添加方法、查看Api
- publiccms实现遍历多级分类下的不同样式内容
- Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)
- JS对象的属性名规则
- 2019蓝桥杯省赛---java---B---7(外卖店优先级)
- Linux中打包和解压到的方法
- php移动代码,移动专区周级收录如何提交 复制这段php代码即可
- c语言程序设计班档案管理系统报告,C语言班级档案管理系统
- HDU1576(欧几里得算法)